简介
问题描述: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
原因
安装的时候偷懒了,下载opencv
tar包之后,没事先做好功课把依赖都装了,直接解压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然后再重新
完成后,再次只想文章开头代码已经可以正常打开。大功告成