[debug]-ubuntu下opencv无法读取视频且capture.isOpened()测试一直为false

16 篇文章 0 订阅
15 篇文章 2 订阅

简介

问题描述:c++版本采用tar包编译安装的opencv无法正常利用VideoCapture capture()打开视频,利用capture.isOpened()测试一直为false

20200526解决的bug非复制粘贴。

请先检查视频路径是否正确,请尽量使用绝对路径

注意,代码为c++版的opencv,系统为unbuntu20.04,opencv安装方式为采取tar包然后编译安装

代码例子如下


#include <opencv2/opencv.hpp>
using namespace cv;  
using namespace std;  
  
int main()  
{  
    //读取视频或摄像头  
    VideoCapture capture("/home/cheng/Desktop/12.mp4");  
    
    if(!capture.isOpened()){
        std::cout << "打开失败" << std::endl;
    }

    while (true)  
    {  
        Mat frame;  
        capture >> frame;  
        imshow("读取视频", frame);  
        cv::waitKey(30);    //延时30  
    }  
    return 0;
}  

输出

打开失败
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.10) /home/cheng/somelib/opencv-3.4.10/modules/highgui/src/window.cpp:382: 
  error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'

Aborted (core dumped)

其中capture.isOpened()一直为false


原因

安装的时候偷懒了,下载opencvtar包之后,没事先做好功课把依赖都装了,直接解压tar包然后编译了,导致一些所需的依赖文件没有交叉编译上,其中可能缺少了某些opencv用于解码处理video的依赖。


安装依赖

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

libjasper-dev 这个可能会出问题,会出问题的话,就先移除掉这个库然后单独安装
单独安装libjasper-dev,过程如下

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

重新编译opencv

因为在依赖之前已经编译完了opencv了,所以需要完全删除opencv然后再重新

完全删除教程
编译安装教程

完成后,再次只想文章开头代码已经可以正常打开。大功告成


补充

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值