Opencv:从相机捕获中检索的图像始终为灰色
我总是得到一个灰色的屏幕时,显示图像使用opencv,图像是从相机捕获Opencv:从相机捕获中检索的图像始终为灰色,opencv,Opencv,我总是得到一个灰色的屏幕时,显示图像使用opencv,图像是从相机捕获 capture = cvCaptureFromCAM(-1); cvGrabFrame(capture); image = cvRetrieveFrame(capture); cvShowImage("name", image); 在此之后,我看到灰色屏幕,即使我在循环中看到。但同样的代码在另一台计算机上运行良好。有什么问题?两台计算机上使用相同的opencv库版本。在Visual Studio 2010中工作,C++ O
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添加的额外延迟。您正在绘制新的内容,速度太快,实际显示无法跟上。