我想从Python访问我的网络摄像头。
我尝试使用VideoCapture扩展程序(tutorial),但这对我来说效果不佳,我不得不解决一些问题,比如分辨率> 320x230有点慢,有时它会毫无理由地返回None
。
有没有更好的方法从Python访问我的网络摄像头?
答案 0 :(得分:49)
OpenCV支持从网络摄像头获取数据,默认情况下它附带Python包装器,您还需要为OpenCV Python扩展(称为numpy
)安装cv2
才能工作。
自2019年起,您可以使用pip安装这两个库:
pip install numpy
pip install python-opencv
More information on using OpenCV with Python
从Displaying webcam feed using opencv and python复制的示例:
import cv2
cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)
if vc.isOpened(): # try to get the first frame
rval, frame = vc.read()
else:
rval = False
while rval:
cv2.imshow("preview", frame)
rval, frame = vc.read()
key = cv2.waitKey(20)
if key == 27: # exit on ESC
break
cv2.destroyWindow("preview")
答案 1 :(得分:10)
这应该是对@John Montgomery的评论,但我的代表不允许我发表评论。 你的答案很棒,但至少在Windows上,它缺少一行
vc.release()
前
cv2.destroyWindow("preview")
没有它,相机资源被锁定,并且在python控制台被杀之前无法再次捕获。
答案 2 :(得分:1)
gstreamer可以处理网络摄像头输入。如果我记得很清楚,就会有python绑定!
答案 3 :(得分:0)
import cv2 as cv
capture = cv.VideoCapture(0)
while True:
isTrue,frame = capture.read()
cv.imshow('Video',frame)
if cv.waitKey(20) & 0xFF==ord('d'):
break
capture.release()
cv.destroyAllWindows()
0 <-指摄像机,将其替换为文件路径以读取视频文件
cv.waitKey(20)和0xFF == ord('d')<-在按下键时破坏窗口
答案 4 :(得分:-2)
我唯一使用的是VideoCapture,你已经提到过你不喜欢它(虽然我没有遇到任何问题;你遇到了什么错误?)
我过去或现在都找不到任何替代品,所以你可能会被困在使用VideoCapture,或者找到一个不错的C库并为它编写一个Python包装器(这可能比你愿意的更多的工作投入其中)。