opencv无法打开相机

时间:2018-07-31 14:12:25

标签: python-3.x opencv

你好,我编写了一个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()

我正在使用

  • kubuntu 18.04 64位
  • python 3.6.5
  • OpenCV 4.0.0-pre

我在具有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摄像头手柄中...知道吗?

1 个答案:

答案 0 :(得分:0)

您首先要使用来访问相机

cap = cv2.VideoCapture(0)

要从相机读取帧,请使用

ret, frame=cap.read()

要在窗口中显示框架,请使用

cv2.imshow('frame',frame)

要显示流,请使用

while True:
    ret, frame=cap.read()
    cv2.imshow('frame',frame)