我对此很陌生,但一直在阅读并尝试不同的设置来帮助缩小问题范围!任何帮助我克服这个障碍的帮助将不胜感激。
目前我正在运行:Win 7 Ultimate、Visual C++ 2010 Express、OpenCV 2.2.0 和 Microsoft - LifeCam Studio 网络摄像头 - 银色 1080p 高清。
我没有收到任何构建错误,当我运行程序时,我的相机亮起(蓝灯指示它已打开),并且弹出屏幕,我认为应该显示我的相机输入,但它只是一个灰色的盒子,里面什么也没有。我认为下面的代码有助于缩小问题范围,但我不知所措。
int main()
{
CvCapture *webcam = NULL;
webcam = cvCreateCameraCapture(-1);
if(webcam!=NULL)
{
IplImage *frame = cvQueryFrame(webcam);
cvShowImage("WEBCAM_TEST",frame);
cvWaitKey(0);
return 0;
}
else
{
std::cout<<"CAMERA NOT DETECTED"<<std::endl;
return 0;
}
}
您的代码有时会显示黑色图像,有时会在我的系统上显示正确的图像(Windows 7 64 VS2010 OpenCV 2.4.3)...但是,当我将其放入循环中进行不间断流式传输时,图像正常。 ..所以只需稍微修改你的代码并尝试...
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
CvCapture *webcam = NULL;
webcam = cvCreateCameraCapture(-1);
if(webcam!=NULL)
{
while(true)
{
IplImage *frame = cvQueryFrame(webcam);
cvShowImage("WEBCAM_TEST",frame);
cvWaitKey(20);
}
}
else
{
std::cout<<"CAMERA NOT DETECTED"<<std::endl;
return 0;
}
return 0;
}
在 OpenCV 中,如果在创建相机捕获后立即获得帧,通常它是灰色的。您所要做的就是获取下一帧或在获取第一帧之前等待。此代码:
int _tmain(int argc, _TCHAR* argv[])
{
VideoCapture cap(0);
if(!cap.isOpened())
return -1;
Mat frame;
namedWindow("01",1);
//cap >> frame; //option 1
//waitKey(5000); //option 2
cap >> frame;
imshow("01", frame);
int key = waitKey(30);
return 0;
}
将显示灰色框架,但如果您取消注释选项 1 或选项 2 - 它将正常工作。