对象检测android opencv

gar*_*all 5 android opencv image-processing

用Android手机拍照后我想通过点击它来识别图片中的一个对象.在大多数情况下可能的对象:
1.标尺
2.人
3.铅笔
我使用android prebuilt-opencv版本2.3.1我试图点击标尺对象并填充它来标记它,但如果轮廓没有关闭整张图片将被填满.
a)我还试图点击标尺对象,向南,向北,向东,向西看看边缘的位置并收集这些坐标,但我遇到了很多问题(不要问).

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

更新:我用a)解决了问题并且目前使用这种方法(对此不满意).我也尝试过Entreco的方法,但似乎现在还没有提供所需的解决方案.

Ent*_*eco 7

我不知道你是否尝试过这种方法,但通常情况下,你可以通过首先处理图像来获得更好的效果.

1)使用GuassianBlur去除噪音

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

3)应用扩张操作,填补裂缝

通过对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);
Run Code Online (Sandbox Code Playgroud)