我在拍摄照片中的对象轮廓时遇到问题。
为了删除所有噪音,我使用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 ++并将图片加载为灰度Mat(对于Canny,它必须是灰度)。我的物体在每张照片上都有不同的形状,但它始终位于照片的中间。
我要么找到一种方法来通过图像处理获得更好的彩色对象 - 但我不知道还有什么可以尝试 - 或者如何在图像处理后用颜色填充对象(没有它的轮廓,因为这是我最终想要的。)
欢迎任何想法。提前谢谢。
答案 0 :(得分:0)
我找到了一种适用于大多数情况的解决方案。我使用概率Hough变换填充我的对象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()
)后,概率Hough变换在二进制图片中找到对象。该算法找到线条,如果绘制线条,则代表整个对象。当然,有些参数必须适用于某种图片。
我不确定这是否适用于每张照片或每件物品,但就我而言,确实如此。