Qt配置opencv利用VideoCapture读取视频一直返回false踩坑备忘

本人版本:

opencv:4.2.0
Qt:5.12.12

查看版本: 

cout << "opencv version:" << CV_VERSION <<endl;
cout << "Qt version:" << qVersion()<<endl;

1.问题描述,在MainWindow构造函数中写入以下读取视频的代码一直返回false,十分令人郁闷。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    Mat M(2,2,CV_8UC3,Scalar(0,0,255));
//    cout<<"M = "<<endl;
//    cout<<M<<endl;

    VideoCapture v;
    Mat frame;
    v.open("D:/1.MP4");
    if(v.isOpened())
        {
            qDebug()<<"chenggong";
        }
    else
        {
             qDebug()<<"shibai";
        }
    cout<<v.isOpened()<<endl;
    v>>frame;
    imshow("img",frame);
}

2.问题原因

由于采用的是CMake编译的opencv源码,在编译过程中,我们可以打开opencv-build编译目标文件夹目录下查看CMakeDownloadLog.txt文件,会有FFMPEG Download下载失败的日志信息,这是因为FFMPEG的下载仓库在国外网站,导致下载失败。而没有正确编译出FFMPEG的动态链接库。详细可参考以下博客:

Qt下opencv的配置_qt配置opencv_weixin_45773010的博客-CSDN博客

3.解决办法

详细参考这篇文章:

Windows 10下配置OpenCV 4.2.0生成Visual Studio 2019的构建方案 - 哔哩哔哩

3.1下面是下载ffmpeg的文件。打开源码目录 E:\软件安装包\opencv环境\opencv\sources\3rdparty\ffmpeg\fmpeg.cmake文件

 可以从第一行看到对应的ffmpeg版本号为20191119。

 接下来从国内Gitcode网站文件 · ffmpeg/master_20191119 · OpenCV / opencv_3rdparty · GitCodeOpenCV - 3rdparty 🚀 Github 镜像仓库 🚀 源项目地址 ⬇ https://gitcode.net/opencv/opencv_3rdparty/-/tree/ffmpeg/master_20191119找到对应的版本手动下载。

 下载解压缩后会得到ffmpeg_version.cmake,opencv_videoio_ffmpeg.dll,opencv_videoio_ffmpeg_64.dll 三个文件

 将他们复制到源码E:\软件安装包\opencv环境\opencv\sources\.cache\ffmpeg目录下,并按照此目录下的文件名重命名。

 再次点击Configure之后,日志文件中红色消失,最后点击Generate,下面可按照博客Qt配置OpenCV教程,亲测已试过(详细版)_Wi~的博客-CSDN博客

中的内容继续编译配置。

配置完成后重新打开Qt Creator新建一个项目进行读取视频测试,就可以正确打开视频文件了!

需要在.pro文件中添加:

INCLUDEPATH += D:\opencv-build\install\include
LIBS += D:\opencv-build\lib\libopencv_*.a

在mainwindow.cpp文件中引入opencv头文件并在构造函数中书写测试代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include<QDebug>
using namespace cv;
using namespace std;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    Mat M(2,2,CV_8UC3,Scalar(0,0,255));
//    cout<<"M = "<<endl;
//    cout<<M<<endl;

    VideoCapture v;
    Mat frame;
    v.open("D:/1.MP4");
    if(v.isOpened())
        {
            qDebug()<<"chenggong";
        }
    else
        {
             qDebug()<<"shibai";
        }
    cout<<v.isOpened()<<endl;
    v>>frame;
    imshow("img",frame);
}

MainWindow::~MainWindow()
{
    delete ui;
}

最终程序运行如下:

 正确读取到视频并显示第一帧的画面!

所需用到的依赖百度网盘地址链接:

链接:https://pan.baidu.com/s/1YtrCDH-hTU176rJvQ_XFQQ 
提取码:x18s

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值