Python OpenCV-在大津和x27之后,RETR#U外部不工作;s二值化
我对一幅图像应用了大津的二值化,得到了这个结果 之后,我使用此代码获取四个主要形状周围的方框:Python OpenCV-在大津和x27之后,RETR#U外部不工作;s二值化,python,opencv,opencv-contour,Python,Opencv,Opencv Contour,我对一幅图像应用了大津的二值化,得到了这个结果 之后,我使用此代码获取四个主要形状周围的方框: img = cv.imread('test_bin.jpg', 0) _, cnts, _ = cv.findContours(img.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE) for cnt in cnts: x,y,w,h = cv.boundingRect(cnt) cv.rectangle(img,(x,y),(x+w,
img = cv.imread('test_bin.jpg', 0)
_, cnts, _ = cv.findContours(img.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
for cnt in cnts:
x,y,w,h = cv.boundingRect(cnt)
cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
cv.imwrite('test_cnt.jpg', img)
然而,我什么也没有得到。它只返回一个轮廓,我想它可能是完整的图像本身。我看到它适用于RETR_树,但我需要它与RETR_EXTERNAL一起用于下一个操作。失败的地方是什么?根据OpenCV轮廓: 在OpenCV中,查找轮廓就像从黑色中查找白色对象 背景。所以请记住,要找到的对象应该是白色和白色的 背景应该是黑色的 但在您的情况下,这显然与要求相反,因此您只需反转图像,即可简单地执行以下操作:
img = cv2.bitwise_not(img)
此外,请注意:
为了获得更好的准确度,请使用二进制图像。所以在找到等高线之前,
应用阈值或canny边缘检测
我使用了你的图像,在反转图像后得到了以下结果。如果要删除小框,只需使用cv2.threshold
即可获得二进制图像