Qt中结合OPenCv进行视频帧截图

7 篇文章 0 订阅
1 篇文章 0 订阅

程序简介:

主要使用Qt中的QMediaPlayer结合OPencv中的VideoCapture类,制作一个视频截图小工具;包含视频的播放、暂停、音量控制、播放进度显示,视频总帧数的显示,手动输入指定帧间隔进行视频帧截取,手动输入要保存的帧图片前缀,而后进行帧抽取并在界面右下侧的QTextBrowser中显示抽帧保存的进度;在未导入视频和opencv读取视频失败时,右下方的QTextBrowser中将显示相应的提示信息,主界面展示;

在这里插入图片描述

未导入视频时点击播放或开始截图显示 信息在这里插入图片描述
以100帧为间隔截图后的图片显示在这里插入图片描述

程序组织

主界面主要在UI设计器中完成,风格图标存在资源文件中,采用qss文件加载;

在这里插入图片描述
截图部分槽函数代码:

void CapVideoWidget::on_startCapBtn_clicked()
{
	if (openVideoName.isEmpty()) {
    	ui->textBrowser->textCursor().insertText(QString("请检查视频是否已导入!!!") + "\n");
        return;
    }
    int frameSpace = 0;
    ui->frameSpaceEdit->text().isEmpty() ? frameSpace = DEFAULE_CUT_SPACE : frameSpace = spaceNum.toInt();

    QByteArray opencvName=openVideoName.toLatin1();
    const char *openName=opencvName.data();
    capVideoPic.open(openName);
    if (capVideoPic.isOpened()) {
        QString allPath = saveDirPath;
        for (int i = 0; i < realFrameNum; ++i) {
            cv::Mat perFrame;
            capVideoPic>>perFrame;
            if (i % frameSpace == 0) {
                QString tempSuffixStr = suffixStr + QString("%1").arg(i, 5, 10,  QLatin1Char('0'));
                allPath = saveDirPath + tempSuffixStr + ".jpg";
                QByteArray finalSaveName = allPath.toLatin1();
                const char *cStyleName = finalSaveName.data();
                cv::imwrite(cStyleName, perFrame) ? ui->textBrowser->textCursor().insertText(allPath + "\n") :
                                                    ui->textBrowser->textCursor().insertText(QString("Opencv保存图片异常!!!") + "\n");

                allPath = "";
            }
        }
        ui->textBrowser->textCursor().insertText(QString("保存完成") + "\n");
    }
}

完整资源加源码链接
https://download.csdn.net/download/qq_44896246/86806883
小白一枚,开始学习不久,代码能力不足之处,盼望各位大佬多多指点哈!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值