目录
一、ffmpeg安装和编译
因为opencv和ffmpeg的兼容性问题,所以在安装ffmpeg的时候不能选择高于ffmpeg 4.4版本进行编译,ffmpeg高于4.4版本的,API接口变动太大,无法与opencv兼容,在对opencv进行编译的时候会报错。这里选择的是ffmpeg 4.2.2版本进行安装。
git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git -b n4.2.2
后面的安装步骤本人之前写过,就不重复叙述,可以跳转到我之前写过的文章进行查看:ffmpeg基础(二)Linux环境下ffmpeg的配置(Ubuntu 18.04)_谢老板不用蟹的博客-CSDN博客
二、opencv安装和编译
1、安装依赖
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
如果提示:错误:E: 无法定位软件包 libjasper-dev,按照下面的命令执行
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
# libjasper1是libjasper-dev的依赖包
sudo apt install libjasper1 libjasper-dev
2、下载源代码
git clone https://github.com/opencv/opencv.git
3、编译
进入到下载好的opencv-4.x目录。
cd opencv-4.x
创建build目录,用来存放编译好的文件。
mkdir build
进入到build目录下。
cd build
使用cmake进行配置。
-CMAKE_BUILD_TYPE=Release 代表你想编release版本还是debug版本
-CMAKE_INSTALL_PREFIX 是你的.so文件最终放在哪
-DOPENCV_GENERATE_PKGCONFIG=ON 用来生成.pc文件,这个选项一定要加。
-.. 表示CMakeLists.txt生成路径
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D DOPENCV_GENERATE_PKGCONFIG=ON ..
make编译
make -j8
sudo make install
可能遇到的问题
如果在make的时候出现了 c++: internal compiler error: Killed (program cc1plus),其原因是在编译过程中,内存不够造成的。
解决问题:
使用swap创建临时分区
sudo dd if=/dev/zero of=/swapfile bs=64M count=16
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=1024MB
sudo mkswap /swapfile
#把刚才空间格式化成swap格式
chmod 0600 /swapfile
#该目录权限,不改的话,在下一步启动时会报“swapon: /swapfile: insecure permissions 0644, 0600 suggested.”错误
sudo swapon /swapfile
#使用刚才创建的swap空间
如果提示:dd: 打开'/swapfile' 失败: 文本文件忙。执行下面的命令。
sudo swapoff -a
重新执行前面的命令。
因为我们指定了安装路径,所以我们的头文件被放在/usr/local/include/opencv4/opencv2/目录下,我们的库文件被放在/usr/local/lib/目录下,可以进去查看一下这些文件是否是否存在。
接下来可以输入
opencv_version
来判定安装成功的opencv版本号,当出现你安装的opencv版本号时,就安装成功了。
4、环境配置
4.1 指定库路径
vim /etc/ld.so.conf.d/opencv.conf
在文件末尾添加:/usr/local/lib
将这个文件保存然后
sudo ldconfig
原理:
可能出现的问题
如果不指定库路径,直接编译会出现以下报错信息:opencv_test.cpp:(.text+0x69):对‘cv::Mat::Mat()’未定义的引用
opencv_test.cpp:(.text+0xb3):对‘cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)’未定义的引用
opencv_test.cpp:(.text+0xc9):对‘cv::Mat::operator=(cv::Mat&&)’未定义的引用
opencv_test.cpp:(.text+0xd5):对‘cv::Mat::~Mat()’未定义的引用
解决方法:查看4.1 指定库路径 及 4.2 获取头文件路径
4.2 获取头文件路径
使用pkg-config获取opencv的头文件路径。(使用.pc文件可以获取到)
在build目录下查找opencv4.pc文件路径。
find ./ -name opencv4.pc
进入unix-install目录。
cd unix-install
将opencv4.pc文件复制到/usr/lib/pkgconfig路径下。
sudo cp opencv4.pc /usr/lib/pkgconfig/
原因:pkg-config的默认路径是:/usr/lib/pkgconfig/和/usr/share/pkgconfig/,所以使用pkg-config命令的时候会去这两个路径下查找对应的.pc文件。
验证pkg-config是否能够找到opencv4.pc文件。
pkg-config --cflags --libs opencv4
三、配置成果
进入到opencv-4.x目录下,里面有一个samples文件夹,这个里面全是各种语言的测试
cd opencv-4.3.0/samples/cpp/
进到cpp目录下测试c++使用opencv,随便找一个.cpp文件进行编译
例如:
g++ -o edge edge.cpp `pkg-config --cflags --libs opencv4`
注意这里的两个``是键盘左上方的符号,不是单引号,这代表shell的运行语句
编译成功就代表你的opencv可以使用啦!!!
可能遇到的问题
opencv需要c++11支持的问题,报错中会有体现,如果有同学的编译信息过多不好直接找报错,可以
g++ -o egde egde.cpp `pkg-config --cflags --libs opencv4` 2> error
这样当前目录下会出现一个error的文件,vim打开再分析就可以
如果是c++11的问题,直接在编译命令后加上-std=c++11,或者将g++更新到最新版本即可
参考:
linux下编译安装opencv生成opencv.pc_浓茶淡酒的博客-CSDN博客_linux下安装opencv
ubuntu20.04安装opencv步骤及依赖报错:E: 无法定位软件包 libjasper-dev_那记忆微凉的博客-CSDN博客
Ubuntu | 你的内存不够啦:c++: internal compiler error: Killed (program cc1plus)_搞IC的lucas的博客-CSDN博客