首页 > 解决方案 > Opencv在图像上查找轮廓

问题描述

我编写了一个检测图像书籍的代码。第一步是找到图像上的轮廓,但我对一些书有疑问。有时我无法正确检测轮廓(一本书是一个矩形,所以只需找到 4 个轮廓)因为线条没有正确指定,并且我有间隙击败它们,如图所示。有没有办法扩展检测到的边缘?

在此处输入图像描述

这是我的代码:

imgg = cv2.imread('\book.jpg')

gray = cv2.cvtColor(imgg, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray , 10, 250)


(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
total = 0

#binary = cv2.bitwise_not(gray)

for c in cnts:

    area = cv2.contourArea(c)

    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.03 * peri, True)

    if (len(approx) == 4) and (area > 100000):

        cv2.drawContours(imgg, [approx], -1, (0, 255, 0), 4)

cv2.imshow('image',imgg)
cv2.waitKey(0)
cv2.destroyAllWindows()

标签: pythonopencvcomputer-visionobject-detection

解决方案


边缘检测通常效果不佳。在这里,您丢弃了高度相关的信息,即颜色对比度。

饱和分量的二值化将更加有效。

在此处输入图像描述


推荐阅读