使用opencv显示图像时,我总是看到灰色屏幕,图像是从相机捕获的。
capture = cvCaptureFromCAM(-1);
cvGrabFrame(capture);
image = cvRetrieveFrame(capture);
cvShowImage("name", image);
在此之后我看到了灰色的屏幕,即使我是在循环中。但是相同的代码在另一台计算机上运行良好。问题是什么?两台计算机上都使用相同的opencv库版本。在Visual Studio 2010,C ++中工作 Opencv 2.2.0版
编辑1:两台计算机中使用的相机是相同的。 我试图在问题发生的计算机上重建opencv,但没有帮助。
答案 0 :(得分:4)
我在OpenCvSharp中遇到了同样的问题。我不知道是什么原因,但出于某种原因,在显示图像后调用“WaitKey”方法解决了它。
CvCapture mov = new CvCapture(filepath);
IplImage frame = mov.QueryFrame();
CvWindow win1 = new CvWindow(window name);
win1.ShowImage(frame);
CvWindow.WaitKey(1);
答案 1 :(得分:1)
你的问题听起来很奇怪,我希望这会有所帮助
尝试使用cvQueryFrame而不是cvRetrieveFrame() 并告诉我它是否确实存在差异。
这是一个使用opencv进行人脸检测的代码,捕获图像的概念非常类似:
int main( int argc, const char** argv )
{
CvCapture* capture;
Mat frame;
//-- 1. Load the cascades
if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
//-- 2. Read the video stream
capture = cvCaptureFromCAM( -1 );
if( capture )
{
while( true )
{
frame = cvQueryFrame( capture );
//-- 3. Apply the classifier to the frame
if( !frame.empty() )
{ detectAndDisplay( frame ); }
else
{ printf(" --(!) No captured frame -- Break!"); break; }
int c = waitKey(10);
if( (char)c == 'c' ) { break; }
}
}return 0;
}