首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于I in range(defects.shape):AttributeError:'NoneType‘对象没有属性'shape’

对于I in range(defects.shape):AttributeError:'NoneType‘对象没有属性'shape’
EN

Stack Overflow用户
提问于 2013-10-22 14:15:48
回答 1查看 2.6K关注 0票数 2
代码语言:javascript
复制
    import cv2
    import numpy as np
    import sys
    import time
    import os
    cap = cv2.VideoCapture(0)
    while( cap.isOpened() ) :
        ret,img = cap.read()
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        blur = cv2.GaussianBlur(gray,(5,5),0)
        ret,thresh1 = cv2.threshold(blur,70,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

        contours, hierarchy = `enter code here`   
        cv2.findContours(thresh1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
        drawing = np.zeros(img.shape,np.uint8)


        max_area=0


        enter code here
        for i in range(len(contours)):
                cnt=contours[i]
                area = cv2.contourArea(cnt)
                if(area>max_area):
                    max_area=area
                    ci=i
        cnt=contours[ci]
        hull = cv2.convexHull(cnt)
        moments = cv2.moments(cnt)
        if moments['m00']!=0:
                    cx = int(moments['m10']/moments['m00']) # cx = M10/M00
                    cy = int(moments['m01']/moments['m00']) # cy = M01/M00

        centr=(cx,cy)       
        cv2.circle(img,centr,5,[0,0,255],2)       
        cv2.drawContours(drawing,[cnt],0,(0,255,0),2) 
        cv2.drawContours(drawing,[hull],0,(0,0,255),2) 

        cnt = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
        hull = cv2.convexHull(cnt,returnPoints = False)


        if(1):
                   defects = cv2.convexityDefects(cnt,hull)
                   mind=0
                   maxd=0
                   i=0
                   for i in range(defects.shape):
                       s,e,f,d = defects[i,0]
                       start = tuple(cnt[s][0])
                       end = tuple(cnt[e][0])
                       far = tuple(cnt[f][0])
                       cv2.line(img,start,end,[0,255,0],2)
                       cv2.circle(img,far,5,[0,0,255],-1)
                   print(i)

        cv2.imshow('output',drawing)
        cv2.imshow('input',img)

        k = cv2.waitKey(10)
        if k == 27:
            break
EN

回答 1

Stack Overflow用户

发布于 2020-11-02 00:25:46

代码语言:javascript
复制
cnt = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
hull = cv2.convexHull(cnt,returnPoints = False)
defects = cv2.convexityDefects(cnt,hull)
if frame is None:
    continue
mind=0
maxd=0
i=0

托盘使用此if条件.....

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19510316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档