Compile la ejecución de prueba de OpenCV4.4

Proceso de compilación e instalación

Preparación de requisitos previos

1. Vaya a github para descargar el código fuente de opencv4.4.0Preste atención a descargar la versión de lanzamiento
2. Vaya a github para descargar el código fuente opencv_contrib4.4.0Preste atención a descargar la versión de lanzamiento
3. Para obtener el software necesario para la instalación de la computadora (cmake, mingw), consulte otra dirección de blog

Utilice cmake para generar Makefile

1. Abra el software cmake_gui. Esta herramienta está disponible tanto en Linux como en Windows.
Inserte la descripción de la imagen aquí
2. Ingrese la ruta del código fuente en la primera línea y la ruta compilada y generada en la segunda línea (simplemente cree una carpeta usted mismo)
Inserte la descripción de la imagen aquí

Modificar la configuración de la compilación

  • ChequeWITH_QT
    Inserte la descripción de la imagen aquí

  • Qt_DIRInformación de la ruta de configuración : C:\Qt\Qt5.13.2\5.13.2\mingw73_64\lib\cmake\Qt5se modifica de acuerdo con la ruta de instalación personal y debe ser coherente con el compilador seleccionado.

  • ChequeWITH_OPENGL

  • Desmarque WITH_IPP,WITH_MSMF ENABLE_PRECOMPILED_HEADERS

  • Configure la ruta de instalación CMAKE_INSTALL_PREFIX:
    Inserte la descripción de la imagen aquí
    -DesmarqueWITH_OPENCL_D3D11_NV
    Inserte la descripción de la imagen aquí

  • Cancelar toda la TESTconfiguración de tipo de letra, no compilar e instalar
    Inserte la descripción de la imagen aquí

  • ChequeOPENCV_ENABLE_NONFREE
    Inserte la descripción de la imagen aquí

  • Configurado CMAKE_CONFIGURATION_TYPEScomoLanzamiento
    Estilo atrevido

  • Configurado CMAKE_BUILD_TYPEcomoLanzamiento
    Inserte la descripción de la imagen aquí

Afrontar el problema de no poder generar herramientas opencv_traincascade y opencv_createsamples

Cancelar el bloqueo predeterminado
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Generar archivos de biblioteca estáticos

  • BUILD_SHARED_LIBSDesmarque el elemento de configuración (no comparta la biblioteca o biblioteca dinámica) para compilar en una biblioteca estática

Método de vinculación de la biblioteca estática en QT

  • Método 1, QT consulte el
    resumen del artículo : aumento de archivo .pro CONFIG += staticespecificar compilación estática puede ser, este es el único enlace con las bibliotecas dinámicas en diferentes lugares
  • Método 2, en el archivo .pro, haga clic con el botón derecho y seleccione Agregar biblioteca para ir paso a paso.
    GCC consulte el
    resumen del artículo : -staticse pueden especificar vínculos de construcción para aumentar la misma compilación estática; de lo contrario, compile un vínculo de biblioteca dinámica para encontrar la prioridad

Agregar módulo de extensión opencv_contrib

  • Configurado OPENCV_EXTRA_MODULES_PATHcomoopencv_contrib / modulescamino
    Inserte la descripción de la imagen aquí

Posibles problemas

glGenBuffers 'no se declaró en este
problema de alcance para resolver el problema de la dirección de referencia La
configuración de FFMPEG no se habilitó correctamente
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
La causa del problema, la descarga del archivo de biblioteca dinámica falló y su tamaño es0KB
Inserte la descripción de la imagen aquí

  • Tratamiento: 手动下载dll文件consulte el elemento de manejo de problemas al final de este artículo.

  • Finalmente, haga clic en Configurar y genere el Makefile (en el directorio de compilación), use el comando make para compilar y
    Inserte la descripción de la imagen aquí
    generar con éxito el Makefile
    Inserte la descripción de la imagen aquí

Compilar

  • Confirme que se haya instalado la herramienta de creación y que se hayan agregado variables de entorno
    Inserte la descripción de la imagen aquí
  • Realice la compilación e instalación en el directorio Makefile
make
make install

Finalmente, agregue la ruta del archivo de biblioteca dinámica en el directorio de instalación de opencv a la variable de entorno del sistema. Si
aún no está claro, puede buscar el nombre del archivo de biblioteca y ubicarlo allí.
Inserte la descripción de la imagen aquí

Prueba de funcionamiento

Use QT para crear un proyecto de ventana

  • El archivo .pro se modifica de la siguiente manera
#动态库
INCLUDEPATH += H:\My_Workspace\C_File\GitHub\opencv\build\install\include\opencv2 \
               H:\My_Workspace\C_File\GitHub\opencv\build\install\include
LIBS += H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_calib3d440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_core440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_dnn440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_features2d440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_flann440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_gapi440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_highgui440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_imgcodecs440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_imgproc440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_ml440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_objdetect440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_photo440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_stitching440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_video440.dll.a \
                H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_videoio440.dll.a
  • Ejecuta el código y abre una imagen
#include "mainwindow.h"

#include <QApplication>

#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Mat img = imread("C://Users//47282//Desktop//281118.jpg" ,IMREAD_GRAYSCALE);
    namedWindow("111");
    imshow("111", img);

    return a.exec();
}

Nota: Si no se agrega la variable de entorno, la compilación pasará, pero el problema no se ejecutará (problema de finalización anormal)

Utilice QTcreator para compilar e instalar

  • Use QTcreator para abrir el archivo CMakelist, el efecto de apertura es similar a abrir el archivo .pro

  • Seleccionar cadena de herramientas de compilación

  • Seleccione en la configuración de compilación, consulte lo anterior para modificar la configuración, preste atención a guardar la aplicación después de la modificación
    Inserte la descripción de la imagen aquí

  • Preste atención para guardar la configuración modificada
    Inserte la descripción de la imagen aquí

  • Pasos de construcción, haga clic en los detalles y expanda, seleccioneinstallInserte la descripción de la imagen aquí

  • Aumente la opción de compilación multiproceso para acelerar la velocidad de compilación
    Inserte la descripción de la imagen aquí
    Complete lo siguiente
    Inserte la descripción de la imagen aquí

  • hazlo
    Inserte la descripción de la imagen aquí

Posibles problemas que zlib no puede encontrar

  • Método de manejo 1: marcar BUILD_ZLIBpara volver a compilar
  • Método de procesamiento 2: compile zlib usted mismo,
    Inserte la descripción de la imagen aquí
    consulte el script aquí para instalarlo y, finalmente, coloque el archivo de encabezado en la cadena de herramientas de compilación y coloque la biblioteca dinámica en el directorio lib.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

referencia indefinida a `png_init_filter_functions_neon '问题

Problema de optimización del compilador con FPU, puede ver las instrucciones en el
archivo. Modifique el archivo, ubicado en el directorio de origen3rdparty/libpng/pngpriv.h

#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
//改为:
#  if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

Permisos insuficientes para la instalación

Inserte la descripción de la imagen aquí

  • Método de procesamiento 1: debido a que la compilación ha sido exitosa, el Makefile ya existe, vaya directamente al directorio Makefile y abra la terminal
sudo make install
  • Solución 2: Abra qtcreator con privilegios de superadministrador y vuelva a ejecutar la compilación (haga clic en el martillo pequeño).
    Inserte la descripción de la imagen aquí
sudo ./qtcreator
#输入root用户密码即可

Inserte la descripción de la imagen aquí
¡La instalación se ha realizado correctamente!

Compilación en Linux

El directorio pkgconfig en el directorio de instalación después de la compilación en Linux. La ruta del archivo de la PC se agrega a la PKG_CONFIG_PATHvariable de entorno para facilitar la búsqueda y el uso durante la compilación del sistema.

Agregue lo siguiente a /etc/bash.bashrc

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.pc文件的路径信息加到此处

verificación

pkg-config --cflags --libs opencv

Instale FFMPEG primero

Dirección de referencia
compilación x264

#下载x264
wget -c http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2
#解压后,进入源码目录配置编译
./configure --enable-static --enable-shared --disable-asm
make
sudo make install
#更新源
sudo apt update
sudo apt install ffmpeg --fix-missing

Compilación de código fuente, script

#!/bin/sh
#下载
wget -c https://github.com/FFmpeg/FFmpeg/archive/n4.3.1.zip
#解压后,进入源码目录配置编译
unzip FFmpeg-n4.3.1.zip
cd FFmpeg-n4.3.1
./configure \
    --target-os=linux \
    --enable-shared \
    --enable-static \
	--enable-pic \
    --enable-gpl \
    --enable-nonfree \
    --enable-ffmpeg \
    --disable-ffplay \
    --enable-swscale \
	--enable-avresample \
    --enable-pthreads \
    --disable-armv5te \
    --disable-armv6 \
    --disable-armv6t2 \
    --disable-yasm \
    --disable-stripping \
    --enable-libx264 

make clean 
make -j4 && sudo make install

Versión de compilación cruzada de FFMPEG

Primero compila x264

#下载x264
wget -c http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2
#解压后,进入源码目录配置交叉编译
./configure --enable-static --enable-shared --host=arm-linux-gnueabihf --cross-prefix=arm-linux-gnueabihf- --enable-pic --disable-asm --prefix=/opt/x264_INSTALL_7_2HF
#编译
make
#安装
sudo make install

Si se produce el siguiente error en la compilación, cancele. --disable-asm
Inserte la descripción de la imagen aquí
Si sudo make installno se puede encontrar el comando, es posible que la ruta del compilador no esté en /etc/bash.bashrc, intente usar su para ingresar la contraseña y realice la instalación nuevamente para instalar

Compilar ffmpeg

#下载
wget -c https://github.com/FFmpeg/FFmpeg/archive/n4.3.1.zip
#解压后,进入源码目录配置交叉编译

Copie el siguiente script, modifique la cadena de herramientas de compilación, agregue permisos ejecutables y cópielo en el directorio fuente de ffmpeg para su ejecución. Tenga en cuenta que la configuración del elemento arch debe coincidir con el compilador

#!/bin/sh
BASE=/opt/FFMPEG_INSTALL_7_2HF
BUILD_HOST=arm-linux-gnueabihf
OUTPUT_PATH=${BASE}
OTHER_LIB=/opt/x264_INSTALL_7_2HF
./configure \
    --cross-prefix=${BUILD_HOST}- \
    --enable-cross-compile \
    --target-os=linux \
    --cc=${BUILD_HOST}-gcc \
    --arch=arm \
    --prefix=${OUTPUT_PATH}/ffmpeg \
    --enable-shared \
    --enable-static \
	--enable-pic \
    --enable-gpl \
    --enable-nonfree \
    --enable-ffmpeg \
    --disable-ffplay \
    --enable-swscale \
    --enable-avresample \
    --enable-pthreads \
    --disable-armv5te \
    --disable-armv6 \
    --disable-armv6t2 \
    --disable-x86asm \
    --disable-stripping \
    --enable-libx264 \
    --extra-cflags=-I${OTHER_LIB}/include \
    --extra-ldflags=-L${OTHER_LIB}/lib
#--disable-neon 依据平台是否添加此项
make clean 
make -j4 && sudo make install

Compile FFMPEG con x265

Sin embargo, después de agregar x265, debe compilar las bibliotecas xcb y x11. Los
elementos de enlace agregados son los siguientes:

-lx265 -lz -lxcb -lxcb-shm -lxcb-xfixes -lXau -lxcb-shape

Dirección de vista del método de compilación x11 y xcb Dirección de vista del método de compilación
x265 Prueba de compilación
en el directorio opencv-4.4.0/cmake/checks/:

aarch64-linux-gnu-g++ ffmpeg_test.cpp -o ffmpeg -lavcodec -lavformat -lswscale -lavdevice -lavfilter -lavresample -lavutil -lpostproc -lswresample -lx264 -lx265 -lz -lxcb -lxcb-shm -lxcb-xfixes -lXau -lxcb-shape -L/opt/FFMPEG_INSTALL/ffmpeg/lib -L/opt/x264_INSTALL/lib -L/opt/x265/lib -L/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/lib -I/opt/FFMPEG_INSTALL/ffmpeg/include -L/opt/XCB_INSTALL/lib -L/opt/X11_INSTALL/lib

Inserte la descripción de la imagen aquí


Posible problema: no se puede encontrar el archivo de la biblioteca ffmpeg, es decir, no se puede compilar la lista de configuración ffmpeg.
Solución: manera grosera (1, busque palabras clave para HAVE_FFMPEGencontrar el detect_ffmpeg.cmakearchivo, agregue el siguiente párrafo 2 y luego copie el archivo de la biblioteca al directorio ffmpeg 3. 其中第二步应该可以不做,我没有测试
Inserte la descripción de la imagen aquí
Vuelva a compilar la instalación) Los párrafos agregados por cmake son los siguientes:

#这里只是为了set HAVE_FFMPEG 为 ON 配置打印信息骗骗人
if(NOT HAVE_FFMPEG AND NOT WIN32 AND NOT OPENCV_FFMPEG_SKIP_DOWNLOAD)
  message(STATUS "===============Required DOWNLOAD==============")
  include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg.cmake")
  download_win_ffmpeg(FFMPEG_CMAKE_SCRIPT)
  if(FFMPEG_CMAKE_SCRIPT)
    include("${FFMPEG_CMAKE_SCRIPT}")
    set(FFMPEG_libavcodec_VERSION "58.91.100" PARENT_SCOPE) # info
    set(FFMPEG_libavformat_VERSION "58.45.100" PARENT_SCOPE) # info
    set(FFMPEG_libavutil_VERSION "56.51.100" PARENT_SCOPE) # info
    set(FFMPEG_libswscale_VERSION "5.7.100" PARENT_SCOPE) # info
    set(FFMPEG_libavresample_VERSION "4.0.0" PARENT_SCOPE) # info
    set(HAVE_FFMPEG TRUE)
    set(HAVE_FFMPEG_WRAPPER TRUE)
  endif()
endif()

#以下个人调试用,输出HAVE_FFMPEG 等等变量的状态,可以删除
if(NOT HAVE_FFMPEG)
  message(STATUS "===============NOT HAVE_FFMPEG==============")
endif()
if(NOT HAVE_FFMPEG_WRAPPER)
  message(STATUS "===============NOT HAVE_FFMPEG_WRAPPER==============")
endif()
if(NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
  message(STATUS "===============NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK==============")
endif()
if(NOT OPENCV_FFMPEG_USE_FIND_PACKAGE)
  message(STATUS "===============NOT OPENCV_FFMPEG_USE_FIND_PACKAGE==============")
endif()
if(FFMPEG_CMAKE_SCRIPT)
  message(STATUS "==============="${FFMPEG_CMAKE_SCRIPT}"==============")
endif()

#实际作用:测试编译,若无法通过说明库文件放置错误,或者编译错误
if(HAVE_FFMPEG AND HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
  message(STATUS "===============try_compile==============")
  set(FFMPEG_INCLUDE_DIRS "/usr/local/include")#这里根据自己的安装目录修改
  set(FFMPEG_LIBRARIES "-lavcodec -lavformat -lswscale -lavdevice -lavfilter -lavresample -lavutil -lpostproc -lswresample -lx264")#这里根据自己的安装目录修改
  set(HAVE_FFMPEG_WRAPPER FALSE)
  message(STATUS "FFMPEG_INCLUDE_DIRS->:${FFMPEG_INCLUDE_DIRS}")
  message(STATUS "FFMPEG_LIBRARIES->:${FFMPEG_LIBRARIES}")
  try_compile(__VALID_FFMPEG
      "${OpenCV_BINARY_DIR}"
      "${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
      CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
                  "-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
      OUTPUT_VARIABLE TRY_OUT
  )

  if(NOT __VALID_FFMPEG)
    # message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
    message(STATUS "WARNING: Can't build ffmpeg test code")
    set(HAVE_FFMPEG FALSE)
  endif()
endif()

#修改添加编译链接项,这个比较重要,上面只是判断库对不对,这个是加入编译了
if(HAVE_FFMPEG_WRAPPER)
  ocv_add_external_target(ffmpeg "" "" "HAVE_FFMPEG_WRAPPER")
elseif(HAVE_FFMPEG)
  message(STATUS "OK: Can build LIB With ffmpeg code link:${FFMPEG_INCLUDE_DIRS}+${FFMPEG_LIBRARIES}")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FFMPEG_INCLUDE_DIRS} ${FFMPEG_LIBRARIES}")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FFMPEG_INCLUDE_DIRS} ${FFMPEG_LIBRARIES}")
  ocv_add_external_target(ffmpeg "${FFMPEG_INCLUDE_DIRS}" "${FFMPEG_LIBRARIES}" "HAVE_FFMPEG")
endif()

set(HAVE_FFMPEG ${HAVE_FFMPEG} PARENT_SCOPE)

Si los siguientes errores de compilación de prueba no aparecen en la salida de configuración, la biblioteca es correcta.
Inserte la descripción de la imagen aquí
Para la versión de compilación cruzada, especifique la ruta de conexión
set(FFMPEG_LIBRARIES "-lavcodec -lavformat -lswscale -lavdevice -lavfilter -lavresample -lavutil -lpostproc -lswresample -lx264 -L/opt/FFMPEG_INSTALL_7_2HF/ffmpeg/lib -L/opt/x264_INSTALL_7_2HF/lib")

  • Cuando pasa la prueba de compilación y no se puede encontrar la libavxxbiblioteca durante el proceso de compilación, también puede forzarla a especificar (por supuesto, después de modificar cmake de acuerdo con lo anterior, será normal y algunas directamente no necesitarán ser escritas, es mejor confirmar):
    Inserte la descripción de la imagen aquí

Referencia 2 para esta pregunta

  • Cuando no se puede encontrar el archivo de la biblioteca libxxx después de la compilación, verifique si la ruta del archivo de la biblioteca ffmpeg está agregada en /etc/ld.so.conf y
    Inserte la descripción de la imagen aquí
    utilícela después de volver a agregarla: simplemente sudo ldconfogcargue la configuración.

Estilo de éxito

Inserte la descripción de la imagen aquí

Manejo de errores

  • 错误 : gcc: error: long: no
    existe ese archivo o directorio C: \ msys64 \ mingw64 \ bin \ windres.exe: el preprocesamiento falló.
    make [2]: *** [modules \ core \ CMakeFiles \ opencv_core.dir \ build.make: 1475: modules / core / CMakeFiles / opencv_core.dir / vs_version.rc.obj] Error 1
    make [1]: ** * [CMakeFiles \ Makefile2: 1379: modules / core / CMakeFiles / opencv_core.dir / all] Error 2
    make: *** [Makefile: 162: all] Error 2
    Inserte la descripción de la imagen aquí

  • Solución: busque en la interfaz de IU de cmake: OPENCV_ENABLE_ALLOCATOR_STATSdesmarque la casilla para resolver el error.
    Inserte la descripción de la imagen aquí
    Procesando bajo la línea de comando:cmake -DOPENCV_ENABLE_ALLOCATOR_STATS=OFF

  • 错误 : error: boostdesc_bgm.i: No existe tal archivo o directorio

  • Solución 1: busque el archivo. Busque CMakeDownloadLog.txt
    en este archivo para boostdesc_bgm.iencontrar su dirección de descarga, descárguelo manualmente y cópielo en la carpeta que falta.
    Inserte la descripción de la imagen aquí

  • Solución 2: por supuesto, es posible que la descarga no se realice correctamente debido a problemas de red en un momento determinado, o puede hacer clic en Configurar nuevamente para permitirle descargar nuevamente y consultar
    la dirección del blog.

Supongo que te gusta

Origin blog.csdn.net/weixin_42892101/article/details/107467524
Recomendado
Clasificación