gpt4 book ai didi

python - 在opencv中计算python中的轮廓

转载 作者:行者123 更新时间:2023-12-02 17:15:01 24 4
gpt4 key购买 nike

我有一个 python 程序的问题,我想在 C 中计算以下示例中的硬币,并将其转换为 python。

Coins contours

到目前为止,我无法找到 C 行的等价物:

sprintf(msg, "Found %d coins.", contours.size());

我的主要问题是“contours.size()”,我试图用 len() 替换该代码,但它给了我 154 而不是 4,请参见下面的代码:
contours = cv.FindContours(cv.CloneImage(image_threshed), cv.CreateMemStorage(0), cv.CV_RETR_LIST, cv.CV_CHAIN_APPROX_SIMPLE)

cv.DrawContours(image, contours, cv.RGB(255,0,0), cv.RGB(0,255,55), 2,1,8)

NumeroContornos = str(len(contours))

font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, .5, .5, 0, 1, 8)
cv.PutText(image,NumeroContornos, (5,17),font, cv.RGB(250,0,0))

我将不胜感激任何帮助。

最佳答案

当您使用 cv.FindContours 函数查找轮廓时,它会返回一个 cvSeq 对象。它返回多个链接序列,您必须遍历它们以获取所有轮廓。
所以起初,指针只指向第一个轮廓,比如你的第一枚硬币。当您使用 len(contour) ,它只返回该轮廓内的点,即您的第一枚硬币的点。所以现在你可以想象你是如何得到 154 的。这不是轮廓的数量,而是轮廓内的点数。要查看这些要点,print list(contour)当你在图像上画出这些点时,你可以看到它们都构成了硬币的边界。
现在要选择下一个轮廓或下一个硬币,请使用 contour = contour.h_next()等等。
我认为没有内置函数可以返回轮廓数,除非您遍历轮廓并对其进行计数。
试试这个并检查它是否打印 4 个 cvSeq 对象:

while contours:
print contours
contours = contours.h_next()
我已经在这里解释了所有这些事情: What does result of 'list(contour)' denote?
相反,我建议您使用新的 cv2界面更简单更好。在那里,轮廓作为 Numpy 数组列表返回,您可以使用 len(contour) 来查找轮廓的数量。
您可以在此处找到 cv 和 cv2 之间差异的简要说明: What is different between all these OpenCV Python interfaces?
cv接口(interface)很快就会过时。所以最好迁移到新的 cv2界面。

关于python - 在opencv中计算python中的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13905499/

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