CentOS7下编译方式安装opencv及代码测试

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

(2)
witersen的头像witersen
上一篇 2022年3月1日 下午4:09
下一篇 2022年3月6日 下午9:18

相关推荐

发表回复

登录后才能评论

评论列表(16条)

  • F的头像
    F 2022年9月6日 下午5:12

    您好,请问安装包解压好像不能解压,下载的是tar的,用unzip好像解压不了诶,是要换成tar -zxvf那种命令么?谢谢

    • witersen的头像
      witersen 2022年9月6日 下午5:14

      @F是的是的,不好意思笔误:
      tar -zxvf opencv-4.5.5.tar.gz
      这样的应该是

    • F的头像
      F 2022年9月7日 上午1:42

      @witersen嗯嗯呢 谢谢谢谢,就是还想麻烦请问一下编译 make -j4是不是要很久呀笑哭我等了好久终于弄到94%结果不知道是不是卡住了就一直没动了 又舍不得关嗐笑哭

    • F的头像
      F 2022年9月7日 上午3:48

      @F啊解决了 原来是内存不够,需要临时使用交换分区解决。最后可以到用户目录下面输入命令pkg-config –modversion opencv4查看版本后下行显示 4.5.5 就表示安装成功了噶,哇 谢谢您的文章,厉害!

    • witersen的头像
      witersen 2022年9月7日 上午6:26

      @F赞

  • F的头像
    F 2022年9月8日 上午10:11

    不好意思再打扰一下,就是我在编译so文件的时候,一直显示:
    致命错误:opencv2/opencv.hpp:没有那个文件或目录
    #include
    就是在linux环境下是只能用CMakeLists.txt去配置添加opencv头文件诶瞪眼 谢谢

    • witersen的头像
      witersen 2022年9月8日 上午10:16

      @F确实是这样的,因为 target_link_libraries 这个操作已经起到了链接库文件的作用
      如果你要手动编译,那需要自己手动去做这个事情,可以在手动编译的时候手动使用 -I -L -l 等参数指定 opencv 相关库的路径,可以参考本站另一篇文章:https://www.witersen.com/?p=1450

    • F的头像
      F 2022年9月8日 上午10:25

      @witersen哦哦 好滴 谢谢谢谢咧嘴笑

  • F的头像
    F 2022年9月16日 下午2:02

    您好,想请问下在CMakeLists.txt中设置编译模式什么意思诶,就是您在使用的gcc/g++版本对opencv4.5.5版本有要求么,谢谢!

    • witersen的头像
      witersen 2022年9月16日 下午2:05

      @F编译模式就是平时如果用 VisualStudio 系列进行开发 c/c++ 的话,可以选择 debug 或者 release 模式,这个只是手动指定而已,如果是 debug(即调试模式),则编译器不会进行一些优化,还会在程序中插入一些内容用于程序运行时参数获取,如果是 release(即发布模式),则编译器会对代码进行优化

    • F的头像
      F 2022年9月16日 下午2:27

      @witersen哦哦 好滴 谢谢~那一般情况在写CMakeLists.txt或者Makefile都是要设置编译模式么

    • witersen的头像
      witersen 2022年9月16日 下午2:36

      @F关于 这个我也不确定,我一般是Debug模式,你可以注释掉试试能否正常编译

    • F的头像
      F 2022年9月16日 下午2:40

      @witersen哦哦好滴 太感谢您了!打扰您了哈

  • F的头像
    F 2022年9月16日 下午3:48

    不好意思,我还想问下最后一个问题就是要怎样去在CMakeLists.txt里面添加自己写的动态库库文件呢谢谢谢谢可爱嘿嘿

    • witersen的头像
      witersen 2022年9月19日 上午12:11

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

    • F的头像
      F 2022年9月19日 上午12:33

      @witersen哦哦好滴 谢谢啦