[英]How do i solve this TypeError: 'NoneType' object is not subscriptable?
cap = cv2.VideoCapture(0)
while 1:
ret,img = cap.read()
image = cv2.imread('/content/drive/MyDrive/signProject/amer_sign2.png')
cv2_imshow(image)
img = cv2.flip(img, 1)
top, right, bottom, left = 75, 350, 300, 590
roi = img[top:bottom, right:left]
roi=cv2.flip(roi,1)
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)
cv2_imshow(gray)
alpha=classify(gray)
cv2.rectangle(img, (left, top), (right, bottom), (0,255,0), 2)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,alpha,(0,130),font,5,(0,0,255),2)
#cv2.resize(img,(1000,1000))
cv2_imshow(img)
key = cv2.waitKey(1) & 0xFF
if key==ord('q'):
break;
cap.release()
cv2.destroyAllWindows()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last) <ipython-input-36-105ee52e9f68> in <module>()
6 img = cv2.flip(img, 1)
7 top, right, bottom, left = 75, 350, 300, 590
----> 8 roi = img[top:bottom, right:left]
9 roi=cv2.flip(roi,1)
10 gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
TypeError: 'NoneType' object is not subscriptable
该错误意味着您正在尝试索引无法索引的 object (在本例中为NoneType
)。 所以第 8 行中的img
似乎是None
。 这可能是由于ret, img = cap.read()
失败。 cap.read()
中的第一个返回值(在您的例子中称为ret
)指示cap.read()
是否成功。 在使用img
之前,您应该检查ret
是否为True
。
cap.read()
失败了?它失败的原因可能有几个。 这是我要找出问题原因的方法:
我读过几次 OpenCV 中的相机并不总是在索引0
处,但也可能在-1
或其他一些正索引处。
您需要 FFMPEG 编解码器才能使用 OpenCV 读取视频。您可以使用print(cv2.getBuildInformation())
打印 OpenCV 构建信息。 它应该显示一个标记为Video I/O
的部分。 在该部分中应该有一个标记为FFMPEG
的条目,它是YES
或NO
。 如果不是,则需要安装NO
和 FFMPEG
如果您使用的是外置摄像头,请确保它已正确连接并正常工作(例如,将其与其他程序一起使用)。
错误消息意味着,出于某种原因, img
等于None
,因此roi = img[top:bottom, right:left]
触发错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.