如何检测某些对象的边缘

时间:2017-10-14 14:06:03

标签: python opencv edge-detection

我最近决定自学计算机视觉,所以我只知道图像处理的基础知识。我决定尝试一个有希望的简单练习:检测与此类似的图片中的图块

Tiles

我知道我可以使用Hough变换找到每个图块中的圆圈,我会用它来使算法在以后更加强大,但此刻我正在努力寻找图块的轮廓。

我的第一次尝试是调整图像大小,模糊图像,使其成为灰度图像并应用精确图像。然后,瓷砖是具有四个边和一定长宽比的那些轮廓。这适用于大多数图片中的大多数瓷砖,但在这一个中它似乎在顶部失败,因为背景中的白色扬声器(它不认为它有四个边):

gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
blurred_gray = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred_gray, 75, 200)
cv2.imshow("Edged", edged)
cv2.waitKey(0)

Canny detection

然后我发现了image pyramids,并决定通过模糊我的图像,然后从金字塔的更高层次中减去模糊的插值版本,并且现在边缘更加明确,粗糙背景也得到了强调:

blurred_gray = cv2.GaussianBlur(
    cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY), (5, 5), 0)
blurred_gray_recons = cv2.pyrUp(cv2.pyrDown(blurred_gray))
edged = blurred_gray - blurred_gray_recons
cv2.imshow('Edged', edged)

Gaussian difference

在这些情况下,如何可靠地执行边缘检测?请注意,背景颜色并不总是相同。

0 个答案:

没有答案