我对 OpenCV VideoWriter 有疑问。
目前我有 2 个项目:一个在 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();
你知道这个问题吗?请帮我!谢谢。
我是一名优秀的程序员,十分优秀!