在c + + opencv上的灰色屏幕

我已经search了很多关于我的简单问题,但我没有find解决办法。 当我运行我的代码黑色控制台显示我相机的框架大小,但在窗口video不显示,它显示了一个坚实的灰色屏幕。 但是,如果我从HDD播放video,那么它工作正常。 请帮我一下。 这是我的代码

#include <iostream> #include <cv.h> #include <cxcore.h> #include <highgui.h> using namespace std; int main(int argc, char** argv){ CvCapture *capture; IplImage* img=0; cvNamedWindow("Window"); capture = cvCreateCameraCapture( -1); //capture = cvCaptureFromAVI("1.mp4"); //capture = cvCaptureFromCAM(-1); int ext=0; assert( capture ); if(capture==NULL){ cout<<"Cam Not Found!!!"<<endl; getchar(); return -5; } while ( true ){ img = cvQueryFrame( capture ); cvSaveImage("1.jpg",img); if (!img){ printf("Image not Found\n"); break; } cvShowImage("Window", img); cvWaitKey(50); } cvReleaseImage(&img); cvDestroyWindow("Window"); cvReleaseCapture(&capture); return 0; } 

我使用opencv 2.2和Visual Studio 2010

有一件事显然是错误的,你需要改变呼叫的顺序:

 cvShowImage("Window", img); cv::waitKey(20); 

其次,检查cvQueryFrame()的成功是cvQueryFrame()

 img = cvQueryFrame( capture ); if (!img) { // print something break; } 

编辑:

顺便说一下,我只是注意到你正在混合OpenCV的C接口和C ++接口。 不要这样做! 替换cv::waitKey(50); 通过cvWaitKey(50);

出于调试的目的,如果cvQueryFrame()成功,我建议你用cvSaveImage()存储一帧到磁盘,如果这个图像是好的,这意味着捕获程序实际上工作正常,问题在别的地方。

我jast切换openCV版本2.2至2.1和它的工作完美…….

我正在使用OpenCV版本3.1,我得到了同样的问题,我重新构建openCV 3.1并重新检查环境变量,所以我的问题解决了。 你可以备份建立opencv并提取,如果你需要。 对不起,我的英语不好 :)