【问题标题】:contour approximation in opencv python is giving wrong result everytimeopencv python中的轮廓近似每次都会给出错误的结果
【发布时间】:2017-11-14 09:24:14
【问题描述】:

我是图像处理方面的绝对初学者。我想检测各种不同边缘之间的嵌套形状。从我的程序中,我已经通过层次关系成功检测到预期的轮廓。但是当我要检测形状时出现了我的问题.对于轮廓近似,我在我想要的轮廓上使用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()

检测前

成功检测到

【问题讨论】:

    标签: python opencv approximation opencv-contour


    【解决方案1】:

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

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

    在这里您选择一个轮廓(pointS 列表),然后为每个点循环并仅用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2021-06-13
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多