当 len(contours)=1 时,contours 和 contours[0] 有什么区别?
What is the difference between contours and contours[0] when len(contours)=1?
我想找到图像的轮廓,然后绘制它的凸包。我正在做的是加载图像,对它进行阈值处理,找到它的轮廓,然后绘制凸包。
gray = cv2.imread(test_paths[i], 0)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
检测到的轮廓数等于1。
当我尝试绘制轮廓时出现问题,如果我这样做
cv2.drawContours(cnt_dst, cnt, -1, (255, 0, 0), 3)
plt.imshow(cnt_dst)
如果我将代码更改为以下内容:
cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
plt.imshow(cnt_dst)
轮廓不同:
请注意,我得到了与此相同(不错)的结果:
cv2.drawContours(cnt_dst, contours, -1, (255, 0, 0), 3)
知道为什么会这样吗?
cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
或 cv2.drawContours(cnt_dst, contours, -1, (255, 0, 0), 3)
在这种情况下是相同的
-1
告诉 opencv 绘制 all contours 数组的轮廓,0
告诉它绘制 contours 数组的第一个轮廓。
因为只有一个等高线,结果是一样的
另一个调用 cv2.drawContours(cnt_dst, cnt, -1, (255, 0, 0), 3)
可能是伪造的/应该在 opencv 端进行更好的检查。
在this blog中表示:
Now you want to draw "cnt" only. It can be done as follows:
cv2.drawContours(im,[cnt],0,(255,0,0),-1)
Note the square bracket around "cnt". Third argument set to 0, means only that particular contour is drawn.
我想找到图像的轮廓,然后绘制它的凸包。我正在做的是加载图像,对它进行阈值处理,找到它的轮廓,然后绘制凸包。
gray = cv2.imread(test_paths[i], 0)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
检测到的轮廓数等于1。 当我尝试绘制轮廓时出现问题,如果我这样做
cv2.drawContours(cnt_dst, cnt, -1, (255, 0, 0), 3)
plt.imshow(cnt_dst)
如果我将代码更改为以下内容:
cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
plt.imshow(cnt_dst)
轮廓不同:
请注意,我得到了与此相同(不错)的结果:
cv2.drawContours(cnt_dst, contours, -1, (255, 0, 0), 3)
知道为什么会这样吗?
cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
或 cv2.drawContours(cnt_dst, contours, -1, (255, 0, 0), 3)
在这种情况下是相同的
-1
告诉 opencv 绘制 all contours 数组的轮廓,0
告诉它绘制 contours 数组的第一个轮廓。
因为只有一个等高线,结果是一样的
另一个调用 cv2.drawContours(cnt_dst, cnt, -1, (255, 0, 0), 3)
可能是伪造的/应该在 opencv 端进行更好的检查。
在this blog中表示:
Now you want to draw "cnt" only. It can be done as follows:
cv2.drawContours(im,[cnt],0,(255,0,0),-1) Note the square bracket around "cnt". Third argument set to 0, means only that particular contour is drawn.