【发布时间】:2012-08-21 12:31:50
【问题描述】:
我一直在尝试从摄像头捕捉视频并将其写入 AVI 文件。我在 Windows 7 上使用带有 MSVC 2010 (x86) 的 Qt 4.8.2。我有两个版本的代码:一个使用 cv::Mat,另一个使用 IplImage*。但是,只有 IplImage* 版本有效。这是我使用 cv::Mat 的代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
VideoCapture* capture2 = new VideoCapture( CV_CAP_DSHOW );
Size size2 = Size(640,480);
int codec = CV_FOURCC('M', 'J', 'P', 'G');
VideoWriter* writer2 = new VideoWriter("video.avi",codec,15,size2);
int a = 100;
Mat frame2;
while ( a > 0 ) {
capture2->read(frame2);
writer2->write(frame2);
a--;
}
writer2->release();
capture2->release();
return 0;
}
这是使用 IplImage* 的代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main() {
CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
CvSize size = cvSize(640,480);
int codec = CV_FOURCC('M', 'J', 'P', 'G');
CvVideoWriter* writer = cvCreateVideoWriter("video.avi",codec,15,size);
int a = 100;
while ( a > 0 ) {
IplImage* frame = cvQueryFrame( capture );
cvWriteToAVI(writer,frame);
a--;
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture( &capture );
return 0;
}
基本上是一样的,或者至少在我看来是一样的。它读取 100 帧并将它们写入“video.avi”。它编译运行没有错误,但是 cv::Mat 版本不写任何东西,IplImage* 版本完美运行。
有人知道发生了什么吗?
【问题讨论】:
标签: opencv video-capture