我已经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并提取,如果你需要。 对不起,我的英语不好 :)