カムからビデオをキャプチャしてAVIファイルに書き込もうとしています。Windows7のMSVC2010(x86)でQt4.8.2を使用しています。コードには2つのバージョンがあります。1つはcv:: Matを使用し、もう1つは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*バージョンは完全に機能します。
誰かが何が起こっているのかについて何か考えがありますか?