OpenCV源码编译和示例程序

一.介绍

OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法。它轻量级而且高效—由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口
编译环境:Ubuntu-18.04-LTS
gcc版本:Gcc-7.4.0

二.源码下载

官方网址:https://opencv.org/releases/ (选择需要的源码版本下载,此处示例为opencv-3.4.0版本)

三.依赖项安装

  1. apt-get install bison flex m4 build-essential libmpc-dev gcc gcc-multilib (gcc相关依赖和工具)
  2. apt-get install libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev (opencv依赖库)
  3. apt-get install python3 python3-pip (若需编译出opencv的python接口,则需要此依赖)
  4. pip3 install numpy (opencv的python接口依赖numpy包,未安装此包,则不会编译出python接口)
  5. apt-get install cmake git pkg-config (opencv编译由cmake工具执行,头文件和库位置由pkg-config工具提供)

四.编译OpenCV的C++函数接口和python函数接口

  1. cd [opencv_dir] (切换到opencv源码顶层目录)
  2. mkdir build (创建build目录,opencv的编译是由cmake工具执行的)
  3. cd build
  4. cmake … -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/opencv
    (指定编译版本为release版本,编译好的opencv库安装在/opt/opencv目录下)
  5. 执行完上述命令后,cmake工具会执行依赖项检查并同时联网下载 ippicv_2017u3_lnx_intel64_general_20170822.tgz文件
  6. make -j8 (待上述文件下载完成之后)
  7. make install

五.OpenCV库调用前配置

配置步骤:

  1. 配置pkg-config工具读取的.pc文件所在目录
  2. 配置可执行文件运行时opencv动态链接库的搜寻目录 (否则执行可执行文件时会提示找不到库文件)
  3. 配置python3读取opencv模块时的搜寻目录

OpenCV C++函数接口和Python函数接口

 1. 编译并安装成功opencv库后,我们在OpenCV安装目录下的lib目录下可以看到C++的opencv库
 1. OpenCV安装目录下的lib/python3.x目录下可以找到opencv的python函数接口
 1. OpenCV安装目录下的lib/pkgconfig目录下可以找到被pkg-config工具读取的opencv.pc文件,该文件内记录的是opencv的头文件所在位置和库所在位置

Pkg-Config工具使用

   1 配置pkg-config工具搜寻.pc文件目录位置
   1.1 sudo vim /etc/profile
   1.2.添加:export PKG_CONFIG_PATH=/opt/opencv/lib/pkgconfig/:$PKG_CONFIG_PATH
   1.3 source /etc/profile         
   2 pkg-config工具常用命令:
   2.1 pkg-config --modversion [libname]  (查看安装库版本)
   2.2 pkg-config --cflags [libname]  (查看安装库的头文件搜索路径)
   2.3 pkg-config --libs [libname] (查看安装库的库搜寻路径和需要链接的库名)

. 设置opencv动态库链接时的搜寻路径

   1 vim /etc/ld.so.conf  (程序执行时,动态库链接的搜寻路径在此文件中指定)
   2 添加opencv动态库搜寻目录,例: /opt/opencv/lib
   3 sudo ldconfig  (刷新配置文件)

设置python3读取opencv模块时的搜寻目录

  1. vim /etc/profile
  2. 添加:export PYTHONPATH=/opt/opencv/lib/python3.6/dist-packages:$PYTHONPATH
  3. source /etc/profile  
  4. 进入python3解释器:python3
  5. 导入opencv模块:import cv2    (若没有出现任何提示,则说明成功导入模块)

六 .编写调用opencv的c++示例程序

源代码:

#include
#include
#include

using namespace std;
using namespace cv;


int main(int argc,char *argv[])
{
    if(argc != 2)
        cout << "Usage:./out [filename]" << endl;

    else
    {
    string image_name=argv[1];

    Mat image = imread(image_name,1); //read RGB_mage 
    if(image.empty()) //judge image_data if empty
    {
        cout << "Read image failed" << endl;
        exit(1);  //exit failed
    }
    namedWindow(image_name,CV_WINDOW_NORMAL); //create show_window
    imshow(image_name,image);  //show image

    char key; //keep acquired keyboard_value
    key=waitKey(0);

    if(key==27)
      destroyAllWindows();  //close up all windows when key='ESC'
    if(key=='s')  //save file when key='s'
      imwrite("image_saved.jpg",image);
    return 0;
    }
}

编译OpenCv程序的两种方法
1.使用命令行编译:
g++ test.cpp pkg-config --cflags --libs opencv (opencv的头文件搜索和库搜索均通过pkg-config工具传递,注意此处的pkg-config --cflags --libs opencv命令两侧使用``符号扩起来)
显示效果:
OpenCV源码编译和示例程序_第1张图片
2.编写CMakeLists.txt配置文件,让cmake工具执行编译过程,此处有两种书写配置文件的方法(大型工程适用)
2.1 适用环境:opencv的头文件和库所在路径未知,使用find_package命令自动获取本机内安装的opencv路径
当前目录下新建CMakeLists.txt配置文件,写入下列内容:

cmake_minimum_required(VERSION 3.5)  #需要满足cmake最低版本
project(Dog)  #项目名称,和项目的文件夹名称对应即可
find_package(OpenCV REQUIRED) #在系统内找到opencv库,搜索系统内的.cmake文件,在编 译安装好的opencv目录下的share目录下
include_directories(${OPENCV_INCLUDE_DIRS}) #将find_package命令找到的opencv头文件所在路径添加到头文件查找路径
add_executable(dog dog.cpp ) #前一个参数:编译出的可执行文件名  后一个参数:需要被编译的源程序名  
target_link_libraries(dog ${OpenCV_LIBS} ) #前一个参数:可执行文件名 后一个参数:链接到opencv库

2.2 适用环境:已知opencv头文件和库所在路径,直接设置搜寻路径

include_directories(${PROJECT_SOURCE_DIR}/include /opt/opencv-3.4.0/include /opt/opencv-3.4.0/include/opencv2)  #头文件搜索目录,PROJECT_SOURCE_DIR为cmake预定义变量,执行项目顶层目录
link_directories(/opt/opencv-3.4.0/lib)  #链接库搜索目录
set(FILE_NAME use_opencv)
add_executable(${FILE_NAME} use_opencv.cpp) #生成.c文件的.o文件
target_link_libraries(${FILE_NAME} opencv_dnn opencv_ml opencv_objdetect opencv_shape opencv_stitching opencv_superres opencv_videostab opencv_calib3d opencv_features2d opencv_highgui opencv_videoio opencv_imgcodecs opencv_video opencv_photo opencv_imgproc opencv_flann opencv_core
) #指定链接库
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)

2.3 新建build目录,进入build目录,执行:cmake … (即可看到build目录内生成了Makefile文件)
注:若是嫌opencv源码编译太费事,可以直接安装opencv包,命令如下:

  1. apt-get install libopencv-dev (opencv库,无python接口)
  2. apt-get install python-opencv (python下的opencv模块)

你可能感兴趣的:(linux下系统配置)