gpt4 book ai didi

python - opencv python 中的轮廓近似每次都会给出错误的结果

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:14 24 4
gpt4 key购买 nike

我是图像处理的绝对初学者。我想检测各种不同边缘之间的嵌套形状。从我的程序中,我已经通过层次关系成功检测到我预期的轮廓。但是当我要检测形状时,我的问题出现了.对于轮廓近似,我使用 cv2.approxpolyDP() 方法/函数在我想要的轮廓上使用它的索引号。但每次它都会产生相同的输出,即“1”。我不知道我在哪里弄错了。请看一下并给我一些建议。下面给出了代码,这些链接中也给出了要检测的图像。请帮助我...

import cv2
import numpy as np
maxx=0
original_color=cv2.imread("tri.jpg",1)
original=cv2.cvtColor(original_color,cv2.COLOR_BGR2GRAY)
#cv2.imshow("original",original)
blur=cv2.GaussianBlur(original,(5,5),0)
ret,thresh=cv2.threshold(blur,50,255,cv2.THRESH_BINARY)
edges = cv2.Canny(thresh,100,200)
image,contours,hierarchy=cv2.findContours(edges.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print len(contours)
##for c in range(0,len(hierarchy)) :
## a=zip(hierarchy[c],contours[c])

for i in range(0,len(hierarchy[0])):
if hierarchy[0][i][2]>=maxx :
if(hierarchy[0][i][3]==(hierarchy[0][i][2]-2)):
maxx=hierarchy[0][i][2]
index=i
cnt=contours[index]
for c in cnt :
peri=cv2.arcLength(c,True)
approx=cv2.approxPolyDP(c,0.04*peri,True)
print hierarchy
print maxx
print len(approx)

cv2.drawContours(original_color,contours,index,(0,255,0),3)
cv2.imshow("Show",original_color)
cv2.waitKey()
cv2.destroyAllWindows()

检测前

before detection

成功检测

successfully detected

最佳答案

findContours 的结果是点列表的列表,这意味着问题在这里:

cnt=contours[index]
for c in cnt :
peri=cv2.arcLength(c,True)
approx=cv2.approxPolyDP(c,0.04*peri,True)

在这里你选择一个轮廓(点列表)然后循环每个点并只用 1 个点做 approxPolyDP。你应该按照轮廓来做。所以,如果你想让它为选定的轮廓做这件事,你应该这样做:

cnt=contours[index]
peri=cv2.arcLength(cnt,True)
approx=cv2.approxPolyDP(cnt,0.04*peri,True)

如果你想对每个轮廓都这样做,那么就这样做(将打印保持在循环内,否则它只会显示最后一个):

for c in contours:
peri=cv2.arcLength(c,True)
approx=cv2.approxPolyDP(c,0.04*peri,True)
print len(approx)

关于python - opencv python 中的轮廓近似每次都会给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47281946/

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