我想在我的笔记本电脑上使用我的内置摄像头捕捉视频,但它会出错。
实际上我有一个项目需要制作一个程序来检测形状,我已经完成,直到程序可以从jpeg检测到形状,但是当我编辑代码来检测相机时,它已经来了错误。
我使用简单的代码运行相机(在谷歌上找到),当我使用我的主项目程序时它会给出同样的错误。
错误(我一直点击继续):
[1] OpenCV Error: Assertion failed (scn == 3 || scn ==4) in cv::cvtColor, ...
[2] OpenCV Error: Assertion failed (size.width)0 && size.height)0) in cv::imshow,...
[3] OpenCV Error: Bad flag (parameter or structure field0 (.....) in cvGetMat,...
我不知道如何处理上一个错误,我认为是第一次和第二次错误,因为我的相机尚未准备就绪.CMIIW
我使用此代码打开相机:
VideoCapture cap(0); //open the default camera
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
if (!cap.isOpened()) //check if we succeeded
return -1;
我的相机LED指示灯亮起,边缘"应该显示结果的窗口,但它只是空白。
希望你能帮助我。
编辑:我用以下方法解决了我的问题:
try
{
imshow("webcam", frame);
}
catch (Exception& e)
{
const char* err_msg = e.what();
std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}
[2]错误仍然显示,但之后我的相机正常工作。
答案 0 :(得分:0)
此代码适用于我,使用OpenCV v2.4.10:
VideoCapture cap(0); // Open the default camera
if (!cap.isOpened()) // Check if we succeeded
return;
string szWebcam = "Webcam - ESC to exit";
namedWindow(szWebcam, CV_WINDOW_AUTOSIZE);
char cKey = '0';
Mat imgFrame;
for (;;)
{
cap >> imgFrame; // Get a new frame from camera
imshow(szWebcam, imgFrame); // Show image
cKey = cvWaitKey(30);
if (cKey == 27) // Is ESC, exit
break;
}
请注意,cap.Set(CV_CAP_PROP_FRAME_WIDTH,xxx)命令取决于相机的功能。例如,在我的笔记本电脑上,相机可以提供640x480(默认)或1280x720帧。打电话给:
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
使我的相机提供1280x720帧。奇怪的是,我注意到使用640到1080之间的任何内容都会产生640x480的帧;使用1081或更大的任何东西,得到1280x720的帧。但是,使用不等于640或1280的数字时没有错误。您应该检查相机的规格。您还可以调用capture.get(CV_CAP_PROP_FRAME_WIDTH)来获取默认帧大小的宽度。