我遇到OpenCV VideoWriter的问题。
目前我有两个项目:一个在C#中,另一个在C ++中。
C#项目将读取* .bmp文件,创建位图列表然后在C ++项目中调用writeVideo函数。
在C ++项目中,我使用带有MJPG编解码器的VideoWriter,从位图列表中逐个读取位图,转换为mat,添加到cv :: VideoWriter对象,然后使用video.release()。
所有* .bmp文件都是101x76。
当文件夹有53个文件时,它可以正常工作。否则,当文件夹少于53个文件时,它不起作用(输出文件无法打开)。
这是我的代码:
int s = bmList->Count;
int w = bmList[0]->Width;
int h = bmList[0]->Height;
cv::VideoWriter video(msclr::interop::marshal_as<std::string>(path), CV_FOURCC('M','J','P','G'), 10, cv::Size(w, h));
for (int i = 0; i < s; i++){
IplImage* temp;
System::Drawing::Imaging::BitmapData^ bitmapData = bmList[i]->LockBits(System::Drawing::Rectangle(0, 0, w, h), System::Drawing::Imaging::ImageLockMode::ReadWrite, bmList[i]->PixelFormat);
temp = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, 4);
temp->imageData = (char*)bitmapData->Scan0.ToPointer();
bmList[i]->UnlockBits(bitmapData);
cv::Mat mat = cv::Mat();
cv::cvtColor(cv::Mat(temp), mat, CV_BGRA2BGR);
video << mat;
}
video.release();
你知道这个问题吗?请帮我!谢谢。
答案 0 :(得分:1)
表示输入缓冲区小于最小大小。我将OpenCV升级到3.1.0并且有效。
谢谢大家的支持!