C++ 视频中的移位图像
我正在尝试使用opencv的VideoWriter编写视频。以下是代码:C++ 视频中的移位图像,c++,video,opencv,C++,Video,Opencv,我正在尝试使用opencv的VideoWriter编写视频。以下是代码: int main() { //read image from file: Mat image(cvLoadImage("temp.bmp")); //create videowriter (DivX codec): VideoWriter record("output.avi", CV_FOURCC('D','I','V','X'), 30, image.size(), true);
int main() {
//read image from file:
Mat image(cvLoadImage("temp.bmp"));
//create videowriter (DivX codec):
VideoWriter record("output.avi", CV_FOURCC('D','I','V','X'), 30, image.size(), true);
for (int i=0; i<100; ++i) {
//write frame to video:
record<<image;
}
}
intmain(){
//从文件中读取图像:
Mat图像(cvLoadImage(“temp.bmp”);
//创建videowriter(DivX编解码器):
VideoWriter记录(“output.avi”,CV_FOURCC('D','I','V','X'),30,image.size(),true);
对于(int i=0;i我刚刚在OpenCV 2.4.1上测试了这个问题(之前我在版本2.3.1上测试过),效果很好!似乎这是个bug。我遇到了与您相同的问题:
VideoWriter out_capture("video.avi",CV_FOURCC('M','J','P','G'), 30, RESULTS[0].size() ,true);
for(int i = 0 ; i < RESULTS.size() ; i++)
{
Mat img;
RESULTS[i].copyTo(img);
if(img.empty())
break;
out_capture << img;
}
VideoWriter out_-capture(“video.avi”,CV_-FOURCC('M','J','P','G'),30,结果[0].size(),true);
对于(int i=0;i out\u capture您尝试过“DIB”格式吗?@Eric,谢谢您的回复。我尝试过CV\u FOURCC('D'、'I'、'B'、'')
,但出现了以下错误:OpenCV错误:不支持的格式或格式组合(Gstreamer OpenCV后端不支持此编解码器)在CvVideoWriter\u GStreamer::open
中。我做错了什么?很难说是什么错了。但这只是一个猜测,可能是因为CvLoadImage无法删除位图文件中的行距。您可以尝试宽度为4倍的其他.bmp图像(在这种情况下,将不会有行距)然后告诉我是否有任何不同。@nac,没错!当我将图像宽度从1922年扩展到1924年时,视频开始正常写入。谢谢!太好了!他们成功地编写了这么多编解码器和解析器,但留下了这么一个普通的东西,这有点可笑。在所有位图文档中,他们突出显示并加粗了一行“当心行”不管怎么说,如果你想彻底解决这个问题,可以使用.bmp和“alpha channel”[R-G-B-A]。它们对任何维度都不需要填充。