我已经搜索了很多关于我的简单问题,但我没有找到解决方案。当我运行我的代码黑色控制台显示相机框架大小但在窗口视频没有显示时,它显示一个坚实的灰色屏幕。但是,如果我从HDD播放视频,那么它可以正常工作。 请帮帮我一些。 这是我的代码
#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
答案 0 :(得分:2)
有一点显然是错误的,您需要将调用顺序更改为:
cvShowImage("Window", img);
cv::waitKey(20);
其次,您必须检查cvQueryFrame()
:
img = cvQueryFrame( capture );
if (!img)
{
// print something
break;
}
修改强>
顺便说一句,我只是注意到你正在混合OpenCV的C接口和C ++接口。不要那样做!将cv::waitKey(50);
替换为cvWaitKey(50);
。
出于调试目的,如果cvQueryFrame()
成功,我建议您使用cvSaveImage()
将一个帧存储到磁盘,如果该图像正常,则表示捕获过程实际上工作正常且问题出在某处其他
答案 1 :(得分:0)
我jast将openCV版本2.2切换到2.1并且它的工作完美.......
答案 2 :(得分:0)
我正在使用OpenCV 3.1版,我遇到了同样的问题,我重新构建了openCV 3.1并重新检查了环境变量,所以我的问题解决了。如果需要,您可以备份内置的opencv并解压缩。抱歉我的英文不好:)