C++ 视频中的移位图像

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);

我正在尝试使用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);
    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;iout\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]。它们对任何维度都不需要填充。