1、系统准备
- 实验机器为CentOS7.9 mini
2、gcc安装
- 默认的 CentOS 软件源上包含一个名称为Development Tools的软件包组,这个组合包含了 GCC 编译器以及一系列库文件,还有其他编译软件需要用到的工具
#安装
yum group install "Development Tools"
#验证 查看版本
gcc --version
3、cmake编译安装
4、Opencv4.5.5编译安装
- 安装依赖
yum -y install epel-release
yum -y install gtk2-devel
yum -y install libpng-devel
yum -y install jasper-devel
yum -y install openexr-devel
yum -y install libwebp-devel
yum -y install libjpeg-turbo-devel
yum -y install libtiff-devel
yum -y install tbb-devel eigen3-devel
yum -y install boost boost-thread boost-devel
yum -y install libv4l-devel
- 下载opencv和opencv_contrib安装包(不推荐)
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.5.5 #可选操作 指定安装版本
cd ..
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.5.5#可选操作 指定安装版本
cd ..
- 或者使用以下方案(推荐)
wget https://www.witersen.com/wp-content/uploads/2022/03/opencv-4.5.5.tar.gz
unzip opencv-4.5.5.zip
wget https://www.witersen.com/wp-content/uploads/2022/03/opencv_contrib-4.5.5.tar.gz
unzip opencv_contrib-4.5.5.zip
- opencv_contrib移动到opencv目录下
- 进入opencv文件夹并创建build文件夹
cd opencv
mkdir build
cd build
- 首先确保在build目录下,然后输入下述命令
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ -D WITH_TBB=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..
- 编译
#cpu有几核心就可以写几 并行编译可加快速度
make -j4
- 安装
make install
- 接下来配置opencv库可执行路径
- 安装vim
yum -y install vim
- 添加库路径 执行
ln -s /usr/local/lib64/pkgconfig/opencv4.pc /usr/share/pkgconfig/
ldconfig
- 添加环境变量
#编辑文件
vim /etc/profile
#在文件末尾另起行加入如下两行保存退出
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
#最后令其生效
source /etc/profile
- 接下来进行pkg-config配置 默认的pkg搜索链接路径/usr/lib/pkgconfig 需要将opencv.pc拷贝到pkg的默认路径下
cp /usr/local/lib64/pkgconfig/opencv4.pc /usr/lib/pkgconfig
- 然后输入命令
ldconfig
- 输入下面的命令查看当前opencv版本号
pkg-config --modversion opencv4
5、使用Opencv编写C++图像处理程序
- 编写CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 3.1 )
# 声明一个 cmake 工程
project( pro )
# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" )
#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)
#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})
#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )
# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})
- 编写C++文件main.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
Mat image;
image = imread("./1.jpg");
if (image.empty()) {
cout << "Error! Input image cannot be read...\n";
return -1;
}
cout<<"图像宽为:"<<image.cols<<"\t高度为:"<<image.rows<<"\t通道数为:"<<image.channels()<<endl;
return 0;
}
- 正常的使用cmake编译和运行即可
cmake .
make
原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com
评论列表(16条)
您好,请问安装包解压好像不能解压,下载的是tar的,用unzip好像解压不了诶,是要换成tar -zxvf那种命令么?谢谢
@F:是的是的,不好意思笔误:
tar -zxvf opencv-4.5.5.tar.gz
这样的应该是
@witersen:嗯嗯呢 谢谢谢谢,就是还想麻烦请问一下编译 make -j4是不是要很久呀
我等了好久终于弄到94%结果不知道是不是卡住了就一直没动了 又舍不得关嗐
@F:啊解决了 原来是内存不够,需要临时使用交换分区解决。最后可以到用户目录下面输入命令pkg-config –modversion opencv4查看版本后下行显示 4.5.5 就表示安装成功了噶,哇 谢谢您的文章,厉害!
@F:
不好意思再打扰一下,就是我在编译so文件的时候,一直显示:
谢谢
致命错误:opencv2/opencv.hpp:没有那个文件或目录
#include
就是在linux环境下是只能用CMakeLists.txt去配置添加opencv头文件诶
@F:确实是这样的,因为 target_link_libraries 这个操作已经起到了链接库文件的作用
如果你要手动编译,那需要自己手动去做这个事情,可以在手动编译的时候手动使用 -I -L -l 等参数指定 opencv 相关库的路径,可以参考本站另一篇文章:https://www.witersen.com/?p=1450
@witersen:哦哦 好滴 谢谢谢谢
您好,想请问下在CMakeLists.txt中设置编译模式什么意思诶,就是您在使用的gcc/g++版本对opencv4.5.5版本有要求么,谢谢!
@F:编译模式就是平时如果用 VisualStudio 系列进行开发 c/c++ 的话,可以选择 debug 或者 release 模式,这个只是手动指定而已,如果是 debug(即调试模式),则编译器不会进行一些优化,还会在程序中插入一些内容用于程序运行时参数获取,如果是 release(即发布模式),则编译器会对代码进行优化
@witersen:哦哦 好滴 谢谢~那一般情况在写CMakeLists.txt或者Makefile都是要设置编译模式么
@F:关于 这个我也不确定,我一般是Debug模式,你可以注释掉试试能否正常编译
@witersen:哦哦好滴 太感谢您了!打扰您了哈
不好意思,我还想问下最后一个问题就是要怎样去在CMakeLists.txt里面添加自己写的动态库库文件呢谢谢谢谢

@F:不好意思,这个点我也没有具体做过,我也是有项目需求人脸对比,才了解c/c++的opencv库,在这之前并没有深入c++,我的方向现在是php,真不好意思啊
@witersen:哦哦好滴 谢谢啦