2012-08-07 47 views
0

我的图片中有一个对象的轮廓出现问题。OpenCV:如何获得黑白对象的轮廓?

为了删除所有的噪音,我使用adjustROI()Canny()

我也试过erode()dillate()Laplacian()GaussianBlur()Sobel() ...我甚至发现此代码段锐化图片:

GaussianBlur(src, dst_gaussian, Size(0, 0), 3); 

addWeighted(src, 1.5, dst_gaussian, -0.5, 0, dst); 

但我的结果总是相同的:我的目标是填充与黑白的颜色(如电视屏幕上的噪音),以便不可能获得轮廓与findContours()findContours()找到一百万轮廓,但不是整个对象的一个​​,我检查这与drawContours())。

我使用C++和我加载我的图片作为灰度垫(对于Canny它必须是灰度)。我的物体在每张照片上都有不同的形状,但总是在照片的中间。

我或者需要找到一种方法来通过图像处理获得更好的有色物体 - 但我不知道还有什么要尝试的 - 或者是如何在图像处理之后用颜色填充物体(没有轮廓,因为这是我最终想要的)。

欢迎任何想法。先谢谢你。

+0

如果您不提供示例,将很难回答。我从你以前的文章中了解到,由于你没有“拥有”它们,因此你不能放置这些照片。请,你能生成类似的图像吗? – 2012-08-07 16:21:33

回答

0

我发现了一个适用于大多数情况的解决方案。我使用概率霍夫变换填充我的对象HoughLinesP()

vector<Vec4i> lines; 
HoughLinesP(dst, lines, 1, CV_PI/180, 80, 30, 10); 
for(size_t i = 0; i < lines.size(); i++) 
{ 
    line(color_dst, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8); 
} 

这是来自OpenCV文档提供的一些示例代码。

在使用了一些边缘检测算法(如Canny())之后,概率霍夫变换在二进制图片中查找对象。该算法找出线条,如果绘制,则表示整个对象。当然,某些参数必须适合某种图片。

我不确定这是否适用于每张图片或每个对象,但在我的情况下,它的确如此。