黑屏视频捕获opencv

时间:2016-04-25 20:21:57

标签: c++ opencv camera video-capture

我正在尝试使用相机测试一个非常简单的程序来捕捉视频,但似乎窗口始终是黑色的。 相机的指示灯已打开,程序编译得很好。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace cv; 
using namespace std;

int main() {
VideoCapture stream1(0);   //0 is the id of video device.0 if you have only one camera.

if (!stream1.isOpened()) { //check if video device has been initialised
    cout << "cannot open camera";
}

//unconditional loop
while (true) {
    Mat cameraFrame;
    stream1.read(cameraFrame);
    imshow("cam", cameraFrame);
    if (waitKey(30) >= 0)
        break;
}
system("pause");
return 0;
}

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我发现卡巴斯基正在阻止访问我的相机。 如果打开Kapresky并转至“报告”,然后转至“高级线程保护”选项卡下的“主机入侵防护”列,则可以发现它是否挡住了您的相机。

如果这是问题所在,则可以转到print('hello world') print('hello world') print('hello world') print('hello world') print('hello world') print('hello world') print('hello world') -> Settings-> General Settings-> Exclusions,然后单击Scan exclusions and trusted applications。然后转到Settings并单击Trusted Applications tab-> Add。搜索Applications,然后单击“确定”并选中所有复选框。单击确定,然后单击保存,它应该可以工作。

答案 1 :(得分:0)

要缩小问题根源,请按以下步骤操作:

  • 检查OpenCV highgui是否配置正确。使用

    捕获已保存的视频
    VideoCapture stream1("video.avi");
    stream1.read(cameraFrame);
    

    在cameraFrame上执行imshow。

- 如果您仍然出现黑屏,请将stream1.read(cameraFrame);替换为stream1>>cameraFrame; 如果您现在可以看到您的视频,则表示OpenCV highgui配置正确,并且您使用的相机可能存在问题。

  • 在这种情况下,主摄像头驱动程序通常不会授予对第三方库,OpenCV的访问权限。将VideoCapture stream1(0)替换为VideoCapture stream1(1)。现在,这将指向机器的基本凸轮驱动器,而不是主凸轮驱动器。

  • 如果黑屏仍然存在,我建议使用外部网络摄像头进行测试,如果可能的话,问题可能出在相机硬件本身上

答案 2 :(得分:0)

遇到类似的问题(但使用Python)。 Saransh Kejriwa的评论对DSHOW有用。万一有人偶然发现:

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
cap = cv2.VideoCapture()
cap.open(1 + cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 60)

答案 3 :(得分:0)

在尝试所有解决方案后,我遇到了同样的问题。我发现我的网络摄像头分辨率更高。

通过将1280 * 720更改为640 * 480来解决。

答案 4 :(得分:-1)

我遇到了同样的问题并通过替换

解决了这个问题
 if (waitKey(30) >= 0)
     break;

 if( (char)waitKey(10) == 'q' )
     break;