Qt调用OpenCV实现录制视频文件中的几个问题

在使用Qt调用OpenCV录制视频时遇到cvWriteFrame函数导致的内存错误。经过分析,发现Qt的浅复制机制在与OpenCV结合时产生了问题。通过修改代码,解决了这个问题,确保了视频录制的正常运行。
摘要由CSDN通过智能技术生成

这几天需要做一个视频文件录制功能。用Qt调用OpenCV代码搞定。

其中线程相关的过程省略不写,与CvVideoWriter生成的部分网上有很多,也省略不写。下面只记录这个写入单帧的函数:

第一版:

//ATTENTION: 调用来自另一线程
bool ETVideoController::writeVideo(const ETVideoSource &source, QSize size, CvVideoWriter *pWriter)
{
    QImage img(source.getOneFrame());

    // pImageWrite与img共享内存
    IplImage* pImageWrite = cvCreateImageHeader(
        cvSize(size.width(), size.height()), 8, 3);
    pImageWrite->imageData = reinterpret_cast<char*>(img.bits());
    cvCvtColor(pImageWrite, pImageWrite, CV_RGB2BGR);

    // 写入一帧
    cvWriteFrame(pWriter, pImageWrite);

    cvReleaseImageHeader(&pImageWrite);

    return true;
}



这一版本的代码没有考虑到输入的源图像非24位图的情况,也没有考虑到输入的源图像与视频大小不一致的情况。所以录制后的视频出现了花屏的情况。为改善这一问题,我把代码改成了如下形式:

第二版:

//ATTENTION: 调用来自另一线程
bool ETVideoController::writeV
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值