Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv:从相机捕获中检索的图像始终为灰色_Opencv - Fatal编程技术网

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

Opencv:从相机捕获中检索的图像始终为灰色,opencv,Opencv,我总是得到一个灰色的屏幕时,显示图像使用opencv,图像是从相机捕获 capture = cvCaptureFromCAM(-1); cvGrabFrame(capture); image = cvRetrieveFrame(capture); cvShowImage("name", image); 在此之后,我看到灰色屏幕,即使我在循环中看到。但同样的代码在另一台计算机上运行良好。有什么问题?两台计算机上使用相同的opencv库版本。在Visual Studio 2010中工作,C++ O

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

capture = cvCaptureFromCAM(-1);
cvGrabFrame(capture);
image = cvRetrieveFrame(capture);
cvShowImage("name", image);
在此之后,我看到灰色屏幕,即使我在循环中看到。但同样的代码在另一台计算机上运行良好。有什么问题?两台计算机上使用相同的opencv库版本。在Visual Studio 2010中工作,C++ Opencv版本2.2.0

编辑1:两台计算机中使用的摄像头相同。
我曾尝试在出现问题的计算机上重建opencv,但毫无帮助

你的问题听起来很奇怪

请尝试使用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; 
}




 

我在OpenCvSharp也有同样的问题。我不知道原因是什么,但出于某种原因,在显示图像后调用“WaitKey”方法解决了这个问题

CvCapture mov = new CvCapture(filepath);
IplImage frame = mov.QueryFrame();
CvWindow win1 = new CvWindow(window name);
win1.ShowImage(frame);
CvWindow.WaitKey(1);

你应该尝试设备索引=0,这只是一个想法..尝试了,没有帮助。事实上,摄像机正在工作,我看到它上面的蓝色指示灯亮了。我想问题出在opencv的某个地方。正如这里所解释的:,当使用RetrieveFrame时,首先调用GrabFrame。另一种方法是使用单次调用查询框架。@crisbia对不起,我已经更新了问题。事实上,每次从相机中检索之前,我都会调用cvGrabFrame。只是出于某种原因,没有将它放在上面的代码中。抱歉,但是cvQueryFrame没有帮助。系统需要时间将图像绘制到窗口,没有WaitKey添加的额外延迟。您正在绘制新的内容,速度太快,实际显示无法跟上。