你好,我编写了一个OpenCV应用程序,除了OpenCV无法打开相机外,其他一切运行都很好,我已经测试过相机可以正常运行,并且可以使用以下命令实用工具:
fswebcam -r 640x480 --jpeg 85 -DE 1 webcam-shot.jpg
还有
ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -vframes 1 test1.jpg
一切正常;下一个运行视频文件的示例运行良好:
import numpy as np
import cv2
import os
import time
cap = cv2.VideoCapture('reporte actual.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但是当尝试使用相机时,函数isOpened()总是返回假值:
import numpy as np
import cv2
import os
import time
cap = cv2.VideoCapture(0)
print(cap.get(3))
print(cap.isOpened())
cap.release()
我正在使用
我在具有ubuntu 16.04 64位的PC上测试了相同的代码,并且运行正常,该行
print(cap.get(3))
给我相机的分辨率,函数isOpened()返回一个真值;我已经在OpenCV中启用了ffmpeg支持:
Video I/O:
DC1394: YES (ver 2.2.5)
FFMPEG: YES
avcodec: YES (ver 57.107.100)
avformat: YES (ver 57.83.100)
avutil: YES (ver 55.78.100)
swscale: YES (ver 4.8.100)
avresample: YES (ver 3.7.0)
GStreamer:
base: YES (ver 1.14.1)
video: YES (ver 1.14.1)
app: YES (ver 1.14.1)
riff: YES (ver 1.14.1)
pbutils: YES (ver 1.14.1)
gPhoto2: NO
gstreamer库已安装在我的PC中,当我运行命令时,我可以看到彩条视频显示
gst-launch-1.0 videotestsrc ! xvimagesink
下一个命令
v4l2-ctl --list-devices
告诉我下一个输出:
USB 2.0 Camera: HD 720P Webcam (usb-0000:00:14.0-14):
/dev/video0
所以直到这里一切都还好;当我从命令行运行应用程序时,会得到下一个答案:
gstreamer-critical ** gst_element_get_state assertion 'gst_is_element (element)' failed
为了为analisys拍照,我将OpenCV相机手柄替换为:
ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -vframes 1 test1.jpg
然后我就可以进行我需要做的分析了。所以唯一的问题是在OpenCV摄像头手柄中...知道吗?
答案 0 :(得分:0)
您首先要使用来访问相机
cap = cv2.VideoCapture(0)
要从相机读取帧,请使用
ret, frame=cap.read()
要在窗口中显示框架,请使用
cv2.imshow('frame',frame)
要显示流,请使用
while True:
ret, frame=cap.read()
cv2.imshow('frame',frame)