您的位置:首页 > 运维架构

关于opencv打开摄像头成灰色问题

2017-09-04 21:01 926 查看
代码:

int main(int argc, const char** argv)
{
CvCapture* capture = 0;
Mat frame, image;

capture = cvCaptureFromCAM(-1);
//capture = cvCaptureFromFile("1.avi");
cvNamedWindow("result", 1);
Sleep(2000);
if (capture)
{
cout << "In capture ..." << endl;

for (;;)
{
IplImage* iplImg = cvQueryFrame(capture);
frame = cv::cvarrToMat(iplImg);
if (frame.empty())
{
cout << "No Frame ..." << endl;
break;
}
imshow("result", frame);
cvWaitKey(33);
}
}
else
{
cerr << "ERROR: Could not initiate capture" << endl;
return -1;
}
cvReleaseCapture(&capture);
cvDestroyWindow("result");
return 0;
}
问题描述:

capture可以打开,但是无法抓取frame。

原因:

查找资料看到,可能是因为驱动的原因导致。windows 下的摄像头的都用了Directshow,而opencv 的这两个函数都需要使用VFW的驱动才能正常使用。

解决方法:

使用videocapture

int main(int argc, char** argv)
{
VideoCapture cap;
if (argc > 1)
cap.open(argv[1]);
else
cap.open(0);

if (!cap.isOpened())
{
std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
return -1;
}
Mat frame;
for (;;)
{
cap >> frame;
if (frame.empty())
break;

imshow("FG Segmentation", frame);

int c = waitKey(30);
if (c == 'q' || c == 'Q' || (c & 255) == 27)
break;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: