【问题标题】:How to detect edeges android opencv如何检测边缘android opencv
【发布时间】:2014-05-31 12:08:51
【问题描述】:

我正在使用 android opencv 2.4.8 进行图像处理。我厌倦了到处寻找。但没有得到有效的答案。我的图像名称是 pic1.jpg ,它在 drawable 文件夹中。我创建 Imageview 来显示边缘。图像视图对象名称为 img。我需要在 Imageview 中显示边缘。有谁知道答案吗?

【问题讨论】:

    标签: android opencv android-ndk


    【解决方案1】:

    所以你得到你的图像为 bmp,只需将其转换为 opencv Mat,

    Bitmap bmp; //input image
    Mat srcMat = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8UC3);
    Bitmap myBitmap32 = bmp.copy(Bitmap.Config.ARGB_8888, true);
    Utils.bitmapToMat(myBitmap32, srcMat);
    

    现在在转换为灰色之前对转换后的 Mat 执行精确的边缘检测,

    Mat gray = new Mat(srcMat.size(), CvType.CV_8UC1);
    Imgproc.cvtColor(srcMat, gray, Imgproc.COLOR_RGB2GRAY,4); 
    

    执行 canny 并转换为 4 通道

    Mat edge = new Mat();
    Mat dst = new Mat();
    Imgproc.Canny(gray, edge, 80, 90);
    Imgproc.cvtColor(edge, dst, Imgproc.COLOR_GRAY2RGBA,4);
    

    最终转换为位图

    Bitmap resultBitmap = Bitmap.createBitmap(dst.cols(), dst.rows(),Bitmap.Config.ARGB_8888);           
    Utils.matToBitmap(dst, resultBitmap);
    

    现在在布局中显示图像。

    您也可以参考 opencv-android-sdk 文件夹中的 image-manipulations。

    注意:以上代码未经测试!

    【讨论】:

    • 这是对这个问题的认真彻底的回答。
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多