关于opencv不能调用本地摄像头,报错没有shape属性

这里有一段经典摄像头打开并显示画面的代码

import cv2

cap = cv2.VideoCapture(0)

while(1):
    # 获得图片
    ret, frame = cap.read()
    # 展示图片
    cv2.imshow("capture", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        # 存储图片
        cv2.imwrite("camera.jpg", frame)
        break

cap.release()
cv2.destroyAllWindows()

一般电脑是可以运行成功的,但是有的电脑不行,主要体现为:

1.运行时摄像头会打开,过一会会报错python运行出错,并强制停止。

2.有时候会有报错没有属性shape。

困了我一下午的问题。

解决方案:

cv2.CAP_DSHOW是微软定义的一个数 cv::CAP_DSHOW = 700,

可能加了这个数就可以适应电脑(具体我也不清楚,参见opencv介绍)

最终将

#cap = cv2.VideoCapture(0)
#改为
cap = cv2.VideoCapture(0+cv2.CAP_DSHOW)

这种情况同样适用imutils包下的 WebcamVideoStream

#stream = WebcamVideoStream(src=0,name="WebcamVideoStream").start()  # default camera
#改为
stream = WebcamVideoStream(src=0+cv2.CAP_DSHOW).start()  # default camera

 

你可能感兴趣的:(防忘记,opencv,python)