【问题标题】:object detection android opencv对象检测 android opencv
【发布时间】:2011-11-05 02:53:59
【问题描述】:

用安卓手机拍照后,我想通过点击来识别图片中的对象。大多数情况下可能的对象:
1. 尺子
2. 人
3. 铅笔
我正在使用 android prebuilt-opencv 2.3.1 版本,我尝试单击标尺对象并对其进行填充以标记它,但如果轮廓未闭合,则将填充整个图片。
a)我也尝试点击标尺对象,然后向南、北、东、西走,看看边缘在哪里并收集这些坐标,但我在那里遇到了严重的问题(不要问)。

问题:
1. 是否可以以某种方式关闭轮廓以填充想要的对象?
2. 我真正想要找到的是底部的坐标和(例如)标尺的高度。
任何其他解决方案都值得赞赏。你会如何意识到它?

更新:我用 a) 解决了问题,目前使用这种方法(对此不满意)。我也尝试了 Entreco 的方法,但现在似乎没有给出想要的解决方案。

【问题讨论】:

    标签: android image-processing opencv


    【解决方案1】:

    不知道你有没有试过,但通常情况下,先处理图像可以获得更好的效果。

    1) 应用GuassianBlur 去除噪音

    2) 应用AdaptiveThreshold -> 将图像转换为黑白

    3) 应用Dilate操作,填补空白

    通过对 AdaptiveThreshold 和 Dilate 操作使用不同的设置,您也许可以获得闭合轮廓...

    我用的一个例子是这样的:

    // 1) Apply gaussian blur to remove noise
    Imgproc.GaussianBlur(mGraySubmat, mIntermediateMat, new Size(11,11), 0);
    
    // 2) AdaptiveThreshold -> classify as either black or white
    Imgproc.adaptiveThreshold(mIntermediateMat, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 2);
    
    // 3) Invert the image -> so most of the image is black
    Core.bitwise_not(mIntermediateMat, mIntermediateMat);
    
    // 4) Dilate -> fill the image using the MORPH_DILATE
    Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1));
    Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel);
    

    【讨论】:

    • 非常感谢@Entreco 的回答。我会试试这个并报告。
    • @Entreco 我们可以在闭合轮廓周围画一个矩形
    • 黑色矩形物体不检测边缘。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2011-11-30
    相关资源
    最近更新 更多