gpt4 book ai didi

python - 当 len(contours)=1 时,contours 和 contours[0] 有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 02:40:48 27 4
gpt4 key购买 nike

我想找到图像的轮廓,然后绘制它的凸包。我正在做的是加载图像、对它进行阈值处理、找到它的轮廓,然后绘制凸包。

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)

enter image description here

如果我将代码更改为以下内容:

cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
plt.imshow(cnt_dst)

轮廓不同:

enter image description here

请注意,我得到了与此相同(不错)的结果:

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 绘制 contours 数组的 all 轮廓,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.

关于python - 当 len(contours)=1 时,contours 和 contours[0] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com