Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV-在大津和x27之后,RETR#U外部不工作;s二值化_Python_Opencv_Opencv Contour - Fatal编程技术网

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
即可获得二进制图像