我正在尝试使用相机测试一个非常简单的程序来捕捉视频,但似乎窗口始终是黑色的。 相机的指示灯已打开,程序编译得很好。
#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;
}
答案 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;