python - 对于范围(defects.shape)中的i:AttributeError: 'NoneType'对象没有属性 'shape'

标签 python opencv

    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

最佳答案

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
托盘使用,如果条件.....👍👍👍😊

关于python - 对于范围(defects.shape)中的i:AttributeError: 'NoneType'对象没有属性 'shape',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510316/

相关文章:

python - 如何使用python更改AWS可​​信用户 "sts ExternalId"?

python - 带有 ./manager runserver 的 Django 运行良好,而 Django + uwsgi 返回 404

c++ - 在颜色空间之间转换图像

python-3.x - 让 OpenCV 的 "undistort"运行更高效的简单方法?

python - 如何使数据框中的每一行的每一列都有一个值?

python - 计算图中 2 个节点之间的距离

python - 如何估计 OpenCV 中两个摄像头的位置?

c++ - 情绪识别或特征提取

java - JavaCV 中的 cvCreateCameraCapture、cvCreateFileCapture 等在哪里?

python - 使用多个列组 reshape Pandas Dataframe