我有一个OpenCV程序应该使用网络摄像头(在这种情况下是内置的笔记本电脑摄像头)。该程序编译正常,没有错误,但当我运行它时程序似乎挂起了线:
img_scene = cvCaptureFromCAM(0);
我有一个不同的程序以相同的方式访问相机,所以我不明白为什么这个程序似乎有麻烦。
非工作程序的完整捕获代码:
Mat captureThread() {
if(captureOpen == false){
img_scene = cvCaptureFromCAM(0);
cvSetCaptureProperty(img_scene, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty(img_scene, CV_CAP_PROP_FRAME_HEIGHT, 480);
}
while(1) {
image = cvQueryFrame(img_scene);
if(image.empty()) {
continue;
}
cvtColor(image, gray, CV_BGR2GRAY);
return gray;
}
}
这是在正常工作的其他程序中使用的代码:
img_scene = cvCaptureFromCAM(0);
cvSetCaptureProperty(img_scene, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty(img_scene, CV_CAP_PROP_FRAME_HEIGHT, 480);
while(1) {
imageFrame = cvQueryFrame(img_scene);
if(imageFrame.empty()) {
continue;
cout << "image frame is empty" << endl;
}
cvtColor(imageFrame, gray, CV_BGR2GRAY);
是什么原因导致非工作程序无法访问相机?我也尝试插入USB摄像头并设置cvCaptureFromCam(-1)
,但它也不起作用。
编辑: 非工作程序使用多个线程,而工作程序则不使用。