Opencv:从相机捕获中检索的图像始终为灰色

时间:2011-09-30 05:15:20

标签: opencv

使用opencv显示图像时,我总是看到灰色屏幕,图像是从相机捕获的。

capture = cvCaptureFromCAM(-1);
cvGrabFrame(capture);
image = cvRetrieveFrame(capture);
cvShowImage("name", image);

在此之后我看到了灰色的屏幕,即使我是在循环中。但是相同的代码在另一台计算机上运行良好。问题是什么?两台计算机上都使用相同的opencv库版本。在Visual Studio 2010,C ++中工作 Opencv 2.2.0版

编辑1:两台计算机中使用的相机是相同的。 我试图在问题发生的计算机上重建opencv,但没有帮助。

2 个答案:

答案 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; 
}