Desarrollo C/C++, compilar entorno de compilación OpenCV+gcc+cmake en Linux

Tabla de contenido

1. Descarga del código fuente

Dos, compilación de código fuente

        2.1 Descarga del código fuente de OpenCV

        2.2 cmhacer instalación (no es necesario)

        2.3 Dependencias de instalación de opencv y vista del módulo de soporte

        2.4 Instalar el paquete pkgconfig

        2.5 Instalar el paquete de dependencia de opencv

        2.6 Comenzar a instalar realmente el paquete opencv

        2.7 Configuración de la ruta del entorno Opencv

3. Prueba de caso

        3.1 Diseño del caso

        3.2 Prueba de compilación


1. Descarga del código fuente

        opencv puede descargar el código fuente del sitio web oficial (Cursos - OpenCV), github y gitee para compilar la biblioteca con las funciones específicas que necesita, o puede obtener la biblioteca compilada de SourceForge y aplicarla directamente.

        gitee镜像:opencv: biblioteca de visión artificial de código abierto

        Se recomienda utilizar un espejo doméstico: git clone [email protected]:mirrors/opencv.git

        Descarga de Cmake: Índice de /files, descargue la versión requerida usted mismo, la compilación de versiones diferentes de opencv requiere diferentes requisitos de versión de cmake, se recomienda 2.8.12 o superior, esta es la versión de opecv42.

Dos, compilación de código fuente

        2.1 Descarga del código fuente de OpenCV

        Este artículo utiliza el sistema vmware15 Linux con centos7 instalado y la herramienta git está preinstalada. Ingrese al sistema, abra la herramienta de comando y descargue el código fuente:

git clone [email protected]:mirrors/opencv.git
git clone [email protected]:cubone/opencv_contrib.git

        Una vez completada la descarga del código fuente, ingrese al directorio opencv, abra CmakeLists.txt, puede ver los requisitos de versión de cmake requeridos por diferentes versiones de opencv:

#
# Configure CMake policies
#
if(POLICY CMP0026)
  cmake_policy(SET CMP0026 NEW)
endif()

if(POLICY CMP0042)
  cmake_policy(SET CMP0042 NEW)  # CMake 3.0+ (2.8.12): MacOS "@rpath" in target's install name
endif()

if(POLICY CMP0046)
  cmake_policy(SET CMP0046 NEW)  # warn about non-existed dependencies
endif()

if(POLICY CMP0051)
  cmake_policy(SET CMP0051 NEW)
endif()

if(POLICY CMP0054)  # CMake 3.1: Only interpret if() arguments as variables or keywords when unquoted.
  cmake_policy(SET CMP0054 NEW)
endif()

if(POLICY CMP0056)
  cmake_policy(SET CMP0056 NEW)  # try_compile(): link flags
endif()

if(POLICY CMP0066)
  cmake_policy(SET CMP0066 NEW)  # CMake 3.7: try_compile(): use per-config flags, like CMAKE_CXX_FLAGS_RELEASE
endif()

if(POLICY CMP0067)
  cmake_policy(SET CMP0067 NEW)  # CMake 3.8: try_compile(): honor language standard variables (like C++11)
endif()

if(POLICY CMP0068)
  cmake_policy(SET CMP0068 NEW)  # CMake 3.9+: `RPATH` settings on macOS do not affect `install_name`.
endif()

if(POLICY CMP0075)
  cmake_policy(SET CMP0075 NEW)  # CMake 3.12+: Include file check macros honor `CMAKE_REQUIRED_LIBRARIES`
endif()

if(POLICY CMP0077)
  cmake_policy(SET CMP0077 NEW)  # CMake 3.13+: option() honors normal variables.
endif()

        Por lo tanto, si necesita una determinada versión de OpenCV, debe descargar el soporte de la versión correspondiente usted mismo.

        2.2 cmhacer instalación (no es necesario)

        Este artículo instala la versión cmake-3.25.3:

wget https://cmake.org/files/v3.25/cmake-3.25.3.tar.gz --no-check-certificate
//root
//可以先删除旧版本(非必要):yum remove -y cmake
cp cmake-3.25.3.tar.gz /usr/local/
tar zxvf cmake-3.25.3.tar.gz 
mv cmake-3.25.3 cmake
cd cmake/
./configure 
make && make install

        Luego modifique el perfil y configure la ruta cmake

gedit /etc/profile
//修改,例如在文末加入:
export PATH=$PATH:/usr/local/cmake/bin
//使其生效
source /etc/profile
//测试
cmake --version
//完成后删除安装包
rm -f /usr/local/cmake-3.25.3.tar.gz 

        2.3 Dependencias de instalación de opencv y vista del módulo de soporte

        Cree un directorio de salida de compilación y luego cree un Makefile a través del comando cmake

//opencv所在父目录
mkdir build_opencv
cd  build_opencv
//按需要添加模块支持
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
//输出Makefile文件
//make help命令可以查看支持哪些模块
例如:
The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
... edit_cache
... install
... install/local
... install/strip
... list_install_components
... package
... package_source
... rebuild_cache
... test
......

        Lea atentamente la información de salida del comando cmake antes de instalar para ver si no es compatible con los paquetes que faltan, por ejemplo:

        En la conclusión de la salida del comando cmake, considere cuidadosamente si las funciones y dependencias que necesitamos son compatibles. Por ejemplo, la ventana gráfica necesita compatibilidad con gtk, vtk, etc., y por ejemplo, el video necesita compatibilidad con FFMPEG, etc. En comparación con Windows, la instalación de opencv en linux es principalmente para aclarar qué módulos de opencv se necesitan y qué paquetes dependientes necesitan instalar estos módulos .

        2.4 Instalar el paquete pkgconfig

        Vaya al índice de /releases para descargar el paquete pkg-config:

//指令安装,本文安装方式
yum -y install pkgconfig
//安装完后,路径/usr/lib64/pkgconfig,/usr/share/pkgconfig

//如果版本不合适,手动下载安装
wget https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz --no-check-certificate
//解压
tar -zxvf pkg-config-0.29.2.tar.gz 
//配置
cd pkg-config-0.29.2/
./configure --prefix=/usr/local/pkg-config --with-internal-glib 
//编译
make
//root 用于
make install
//安装路径在/usr/local/pkg-config
whereis pkgconfig

        2.5 Instalar el paquete de dependencia de opencv

        Instale GTK, etc., centos7 admite el comando yum para instalar directamente

yum -y install epel-release
yum -y install gtk2 gtk2-devel gtk2-devel-docs
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 libgnomeui-devel
yum -y install libv4l-devel
yum -y install libdc1394-devel
yum -y install gstreamer-plugins-base-devel
yum -y install python-devel numpy
yum -y install gnome-devel gnome-devel-docs

#yum localinstall –nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
#yum localinstall –nogpgcheck https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
#rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
#yum -y install ffmpeg ffmpeg-devel

        Después de instalar algunos paquetes dependientes, reinicie cmake para verificar si se encuentran estos paquetes. Las siguientes instrucciones de cmake son solo para referencia. Consulte su propio entorno de sistema y la configuración requerida. Para macros relacionadas, consulte el archivo CMakeLists.txt de la fuente código de confirmación:

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ \
-D WITH_GTK=ON \
-D ENABLE_CXX11=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D WITH_CUDA=OFF \
-D BUILD_opencv_cudacodec=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D WITH_EIGEN=OFF \
-D WITH_VTK=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_opencv_python2=OFF \
../opencv

        2.6 Comenzar a instalar realmente el paquete opencv

        Compilar todo el opencv es una tarea que requiere mucho tiempo. Si los desarrolladores solo quieren usar un determinado módulo, pueden compilarlo a pedido, por ejemplo:

[***@pyfree build_opencv]$ make -j2 opencv_core
[ 14%] Built target ittnotify
[100%] Built target opencv_core
[***@pyfree build_opencv]$ 

        Dado que cmake no especifica compilar bibliotecas estáticas, las bibliotecas dinámicas se compilan de forma predeterminada. Una vez completada la compilación, puede cambiar al usuario raíz para la instalación:

//默认编译
make
//安装
su root
//密码
make install

        PS, si no hay un paquete dependiente relevante, muchos módulos opencv se cancelan durante la configuración de cmake, por lo que los paquetes compilados son limitados.Si no hay un paquete o biblioteca que desee, es posible que deba repetir cmake, make y make install directamente, por lo tanto, es mejor no eliminar este paquete compilado después de que se complete la instalación. Debe esperar a que la versión se instale y estabilice.

        2.7 Configuración de la ruta del entorno Opencv

        Dado que cmake especifica la ruta de instalación /usr/local, se adopta la ruta de instalación predeterminada:

OpenCV 默认安装路径是/usr/local目录下, 相关文件部署情况:
    /usr/local/bin - executable files
    /usr/local/lib - libraries (.so)
    /usr/local/cmake/opencv4 - cmake package
    /usr/local/include/opencv4 - headers
    /usr/local/share/opencv4 - other files

//由于cmake配置时,没有做安装目录指定,采用默认路径,也没有指定编译静态库,默认的是动态库编译

         Para opencv, lo más importante para nuestros desarrolladores es prestar atención al archivo de encabezado y la ruta de la biblioteca. La ruta de almacenamiento y la información de contenido relacionada de este artículo son las siguientes:

//头文件所在位置
[root@pyfree ***]# ls /usr/local/include/opencv4/opencv2/
calib3d      features2d      highgui.hpp    objdetect           stitching.hpp
calib3d.hpp  features2d.hpp  imgcodecs      objdetect.hpp       video
core         flann           imgcodecs.hpp  opencv.hpp          video.hpp
core.hpp     flann.hpp       imgproc        opencv_modules.hpp  videoio
cvconfig.h   gapi            imgproc.hpp    photo               videoio.hpp
dnn          gapi.hpp        ml             photo.hpp
dnn.hpp      highgui         ml.hpp         stitching
[root@pyfree ***]# 
//动态库文件位置
[root@pyfree ***]# ls /usr/local/lib64 | grep libopencv
libopencv_calib3d.so
libopencv_calib3d.so.407
libopencv_calib3d.so.4.7.0
libopencv_core.so
libopencv_core.so.407
libopencv_core.so.4.7.0
libopencv_dnn.so
libopencv_dnn.so.407
libopencv_dnn.so.4.7.0
libopencv_features2d.so
libopencv_features2d.so.407
libopencv_features2d.so.4.7.0
libopencv_flann.so
libopencv_flann.so.407
libopencv_flann.so.4.7.0
libopencv_gapi.so
libopencv_gapi.so.407
libopencv_gapi.so.4.7.0
libopencv_highgui.so
libopencv_highgui.so.407
libopencv_highgui.so.4.7.0
libopencv_imgcodecs.so
libopencv_imgcodecs.so.407
libopencv_imgcodecs.so.4.7.0
libopencv_imgproc.so
libopencv_imgproc.so.407
libopencv_imgproc.so.4.7.0
libopencv_ml.so
libopencv_ml.so.407
libopencv_ml.so.4.7.0
libopencv_objdetect.so
libopencv_objdetect.so.407
libopencv_objdetect.so.4.7.0
libopencv_photo.so
libopencv_photo.so.407
libopencv_photo.so.4.7.0
libopencv_stitching.so
libopencv_stitching.so.407
libopencv_stitching.so.4.7.0
libopencv_videoio.so
libopencv_videoio.so.407
libopencv_videoio.so.4.7.0
libopencv_video.so
libopencv_video.so.407
libopencv_video.so.4.7.0
[root@pyfree ***]# 

        Agregue la biblioteca dinámica a la ruta de la biblioteca:

//下面指令需要安装pkgconfig包,以及opencv开启-D OPENCV_GENERATE_PKGCONFIG=ON 支持
ln -sf /usr/local/lib64/pkgconfig/opencv4.pc /usr/share/pkgconfig/
ldconfig
//--1--,root
gedit /etc/profile
//修改PKG_CONFIG_PATH,需要已经安装pkgconfig包
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib64/pkgconfig:/usr/share/pkgconfig
//修改LD_LIBRARY_PATH,将opencv库路径加入,例如文末加入
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64:/usr/lib64:/lib64
//修改保存,关闭文件,运行以下命令生效
 source /etc/profile
//--2--,root
cd /etc/ld.so.conf.d/
vi opencv.conf
//或:gedit /etc/ld.so.conf.d/opencv.conf
//添加opencv动态库路径在文件中,如/usr/local/lib64
//配置生效,运行以下命令
ldconfig    

        Después de instalar gtk y otros paquetes en algunas versiones, ocurrirá un error de dependencia, lo que resultará en una interfaz de error de cierre de sesión al inicio. Esto requiere ctrl+alt+F2 para ingresar al modo de comando y luego ingresar la cuenta raíz y la contraseña.

root
#输入密码
yum update
#...等待
输入 y

        Reinicie después de la actualización, es posible que se genere una nueva versión del kernel.Al iniciar, es mejor seleccionar la versión original del kernel para iniciar sesión (es decir, la versión en la que instalamos originalmente una serie de paquetes de software relacionados con opencv).

3. Prueba de caso

        3.1 Diseño del caso

        El directorio del proyecto es el siguiente:

#一个读取图片的测试项目
test 
    bin
        1.png        #png图片
        2.bmp        #bmp图片
    src
        main.cpp
    Makefile_linux

        principal.cpp

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
    if( argc != 2)
    {
     cout <<" Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
     return -1;
    }
    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file
    if( image.empty() ) // Check for invalid input
    {
        cout << "Could not open or find the image" << std::endl ;
        return -1;
    }
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
    imshow( "Display window", image ); // Show our image inside it.
    waitKey(0); // Wait for a keystroke in the window
    return 0;
}

        La información de configuración del proyecto Makefile_linux es la siguiente:

#/bin/sh
CX= g++

BIN 		:= ./bin
TARGET      := testlinux.exe
FLAGS		:= -std=c++11
SRCDIR 		:= ./src
INCLUDEDIR 	:= -I"/usr/local/include/opencv4" 
DLLDIR		:= "/usr/local/lib64"
LIBDIR		:= -L $(DLLDIR) -lopencv_core -lopencv_highgui -lopencv_imgcodecs
#LIBDIR		:= $(DLLDIR)/libopencv_core.so $(DLLDIR)/libopencv_highgui.so $(DLLDIR)/libopencv_imgcodecs.so
source		:= $(wildcard $(SRCDIR)/*.cpp) 

$(TARGET) :
	$(CX) $(FLAGS) $(INCLUDEDIR) $(source) $(LIBDIR) -o $(BIN)/$(TARGET) 

clean:
	rm  $(BIN)/$(TARGET)

        3.2 Prueba de compilación

        Ejecute el comando makfe -f Makefile_linux para compilar

[***@pyfree test]$ make -f Makefile_linux 
g++  -std=c++11 -I"/usr/local/include/opencv4"  ./src/main.cpp  -L "/usr/local/lib64" -lopencv_core -lopencv_highgui -lopencv_imgcodecs -o ./bin/testlinux.exe 
[***@pyfree test]$ 

        Una vez completada la compilación, el programa aparecerá en el directorio bin, ejecute el programa:
 

    cd bin
    ./testlinux.exe 1.png

        ./testlinux.exe 2.bmp

Supongo que te gusta

Origin blog.csdn.net/py8105/article/details/129874628
Recomendado
Clasificación