OpenCV VideoWriter创建空文件

时间:2018-02-22 04:16:35

标签: c++ opencv

我遇到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();

你知道这个问题吗?请帮我!谢谢。

1 个答案:

答案 0 :(得分:1)

我在这里发现了同样的问题:mjpeg @ 0x27ee9e0 buffer smaller than minimum size: How to create a video file with size less than the minimum buffer size?

表示输入缓冲区小于最小大小。我将OpenCV升级到3.1.0并且有效。

谢谢大家的支持!