Compilation et installation de Linux Opencv

OpenCV est une bibliothèque de logiciels de vision par ordinateur et d'apprentissage automatique multiplateformes basée sur la licence BSD (open source) qui peut fonctionner sur les systèmes d'exploitation Linux, Windows, Android et Mac OS. Il est léger et efficace - composé d'une série de fonctions C et d'un petit nombre de classes C ++, il fournit également des interfaces avec des langages tels que Python, Ruby et MATLAB, et implémente de nombreux algorithmes courants dans le traitement d'image et la vision par ordinateur.

  1. Installer les bibliothèques dépendantes

Si vous ne l'utilisez que pour le développement, vous pouvez installer directement la bibliothèque prête à l'emploi

sudo apt-get install libopencv-dev python-opencv

Compilez les bibliothèques dépendantes requises

  sudo apt-get install build-essential
  sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

libjasper-dev, s'il ne peut pas être installé, vous ne pouvez pas l'installer temporairement

  1. Télécharger le code source
eric@eric-PC:~/Documents/work/linux$ git clone https://gitee.com/mirrors/opencv.git

Entrez dans le répertoire opencv, changez de branche 4.5.0

eric@eric-PC:~/Documents/work/linux/opencv$ git checkout -b 4.5.0
  1. Nouvelle construction de répertoire
eric@eric-PC:~/Documents/work/linux/opencv$ mkdir build
eric@eric-PC:~/Documents/work/linux/opencv$ ls
3rdparty  apps  build  cmake  CMakeLists.txt  CONTRIBUTING.md  COPYRIGHT  data  doc  include  LICENSE  modules  platforms  README.md  samples  SECURITY.md
  1. Entrez dans le répertoire de construction et configurez les paramètres de compilation [cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX = / usr / local…]
eric@eric-PC:~/Documents/work/linux/opencv/build$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake: /usr/local/lib/libcurl.so.4: no version information available (required by cmake)
...
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/eric/Documents/work/linux/opencv/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/eric/Documents/work/linux/opencv/build/3rdparty/ippicv/ippicv_lnx/iw
--     Lapack:                      NO
--     Eigen:                       NO
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/eric/Documents/work/linux/opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.16)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.16)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.16.2)
--     install path:                lib/python2.7/dist-packages/cv2/python-2.7
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
/usr/bin/cmake: /usr/local/lib/libcurl.so.4: no version information available (required by /usr/bin/cmake)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/eric/Documents/work/linux/opencv/build
eric@eric-PC:~/Documents/work/linux/opencv/build$ 

  1. faire
eric@eric-PC:~/Documents/work/linux/opencv/build$ make
...
Scanning dependencies of target opencv_interactive-calibration
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/calibController.cpp.o
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/calibPipeline.cpp.o
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/frameProcessor.cpp.o
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/main.cpp.o
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/parametersController.cpp.o
[100%] Building CXX object apps/interactive-calibration/CMakeFiles/opencv_interactive-calibration.dir/rotationConverters.cpp.o
[100%] Linking CXX executable ../../bin/opencv_interactive-calibration
[100%] Built target opencv_interactive-calibration
Scanning dependencies of target opencv_version
[100%] Building CXX object apps/version/CMakeFiles/opencv_version.dir/opencv_version.cpp.o
[100%] Linking CXX executable ../../bin/opencv_version
[100%] Built target opencv_version

Si l'invite suivante apparaît

cmake: /usr/local/lib/libcurl.so.4: no version information available (required by cmake)

Expliquez que libcurl.so est en conflit

eric@eric-PC:/usr/local/lib$ ls *libcurl* -l
-rw-r--r-- 1 root staff 994226 8月  11 16:10 libcurl.a
-rwxr-xr-x 1 root staff   1004 8月  11 16:10 libcurl.la
lrwxrwxrwx 1 root staff     16 8月  11 16:10 libcurl.so -> libcurl.so.4.6.0
lrwxrwxrwx 1 root staff     16 8月  11 16:10 libcurl.so.4 -> libcurl.so.4.6.0
-rwxr-xr-x 1 root staff 513440 8月  11 16:10 libcurl.so.4.6.0

Supprimez le libcurl.so.4 redondant, vous pouvez

eric@eric-PC:/usr/local/lib$ sudo rm libcurl.so.4
请输入密码
[sudo] eric 的密码:
验证成功
eric@eric-PC:/usr/local/lib$ ls *libcurl* -l
-rw-r--r-- 1 root staff 994226 8月  11 16:10 libcurl.a
-rwxr-xr-x 1 root staff   1004 8月  11 16:10 libcurl.la
lrwxrwxrwx 1 root staff     16 8月  11 16:10 libcurl.so -> libcurl.so.4.6.0
-rwxr-xr-x 1 root staff 513440 8月  11 16:10 libcurl.so.4.6.0
  1. sudo faire installer
eric@eric-PC:~/Documents/work/linux/opencv/build$ sudo make install
...
-- Up-to-date: /usr/local/share/opencv4/haarcascades/haarcascade_righteye_2splits.xml
-- Up-to-date: /usr/local/share/opencv4/haarcascades/haarcascade_russian_plate_number.xml
-- Up-to-date: /usr/local/share/opencv4/haarcascades/haarcascade_smile.xml
-- Up-to-date: /usr/local/share/opencv4/haarcascades/haarcascade_upperbody.xml
-- Up-to-date: /usr/local/share/opencv4/lbpcascades/lbpcascade_frontalcatface.xml
-- Up-to-date: /usr/local/share/opencv4/lbpcascades/lbpcascade_frontalface.xml
-- Up-to-date: /usr/local/share/opencv4/lbpcascades/lbpcascade_frontalface_improved.xml
-- Up-to-date: /usr/local/share/opencv4/lbpcascades/lbpcascade_profileface.xml
-- Up-to-date: /usr/local/share/opencv4/lbpcascades/lbpcascade_silverware.xml
-- Installing: /usr/local/bin/opencv_annotation
-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_visualisation
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib"
eric@eric-PC:~/Documents/work/linux/opencv/build$ 

  1. Vérifiez si opencv est installé avec succès
eric@eric-PC:~/Documents/work/linux/opencv/build$ pkg-config --modversion opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

Demander que opencv.pc ne soit pas trouvé (en théorie, il devrait être généré automatiquement, mais pour une raison quelconque, il n'est pas généré automatiquement, puis ajoutez-le manuellement!)

  • Créez un nouveau /usr/local/lib/pkgconfig/opencv.pc avec le contenu suivant:
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4

Name: opencv
Description: opencv compression library
Version: 4.5.0

Requires:
Libs: -L${libdir} -lopencv_calib3d -lopencv_dnn -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_objdetect -lopencv_stitching -lopencv_video -lopencv_core -lopencv_features2d -lopencv_gapi -lopencv_imgcodecs -lopencv_ml -lopencv_photo -lopencv_videoio
Cflags: -I${includedir}

eric@eric-PC:/usr/local/lib/pkgconfig$ ls opencv*
opencv.pc
  • tester
eric@eric-PC:~/Documents/work/linux/opencv/build$ pkg-config --modversion opencv
4.5.0 
eric@eric-PC:~/Documents/work/linux/opencv/build$ 
eric@eric-PC:~/Documents/work/linux/opencv/build$ pkg-config --cflags --libs opencv
-I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_calib3d -lopencv_dnn -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_objdetect -lopencv_stitching -lopencv_video -lopencv_core -lopencv_features2d -lopencv_gapi -lopencv_imgcodecs -lopencv_ml -lopencv_photo -lopencv_videoio
eric@eric-PC:~/Documents/work/linux/opencv/build$
  1. Écrire un programme de test
eric@eric-PC:~/Documents/work/linux-c/opencv$ tree
.
├── Makefile
└── src
    └── main.cpp

1 directory, 2 files

main.cpp:


#include "opencv2/opencv.hpp"
#include "iostream"
 
using namespace std;
using namespace cv;
 
#define WINDOW_NAME "main"

int main()
{
    
    
	namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);
	Mat image;
	// image = imread("test.jpg");
	image = Mat(240,320,CV_8UC3,Scalar(0,255,0));
 
	cout << "-------------------- 图像参数 ----------------------"<<endl;
	//标志位
	cout << "flags:" << image.flags << endl;
	//图像尺寸
	cout << "size:" << image.size << endl;
	//列宽
	cout << "clos:" << image.cols<<endl;
	//行高
	cout << "rows:" << image.rows << endl;
	//维度
	cout << "dims:" << image.dims << endl;
	
	imshow(WINDOW_NAME,image);
	waitKey(0);

	return 0;
}

Makefile:

######################################
# eric
######################################

## 指定编译工具
CC	= gcc
CPP	= g++
RM	= rm -rf

## 源文件路径(默认检索3层)
SRC_PATH	:= ./src
DIRS	:= $(shell find $(SRC_PATH) -maxdepth 3 -type d)

## 目标文件名称
TARGET	:= main

## 获取所有.c文件路径
SRCS	+= $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c)) 
SRCPPS	+= $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))

## 所有对应目标文件
OBJS	:= $(SRCS:.c=.o) $(SRCPPS:.cpp=.o)

## 所有用到的库
LIBS	:= pthread m  # mbedtls mbedcrypto mbedx509

## 指定头文件路径
INCLUDE_PATH	:= . $(DIRS) #/usr/local/include/opencv4/

## 指定库文件路径
LIB_PATH	:= /lib /usr/local/lib #./libmbedtls

## 编译参数初始化
CFLAGS		:= -g -O3 -pthread #-Wall

## 加载头文件路径
CFLAGS		+= $(foreach dir, $(INCLUDE_PATH), -I$(dir))
CFLAGS 		+=  `pkg-config --cflags --libs opencv` 

## 加载库文件路径
LDFLAGS		+= $(foreach libdir, $(LIB_PATH), -L$(libdir))

## 加载库文件
LDFLAGS 	+= $(foreach lib, $(LIBS), -l$(lib))


.PHONY:all

all: $(TARGET) 
 
$(TARGET) :$(OBJS)
	@$(CPP) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
	@#$(RM) $(OBJS)
	@echo =============================
	@echo $(TARGET) ok

%.o	: %.c
	@echo srcs=$(SRCS)
	@echo $@...
	@$(CC) -c $(CFLAGS) $< -o $@

%.o	: %.cpp
	@echo srcpps=$(SRCPPS)
	@echo LDFLAGS=$(LDFLAGS)
	@echo OBJS=$(OBJS)
	@echo $@...
	@$(CPP) -c $(CFLAGS) $< -o $@ 

# %.o	: %.S
#     $(CC) -c $(CFLAGS) $< -o $@
 
.PHONY:clean
clean:
	$(RM) $(OBJS) $(TARGET)
  1. Exécutez le programme de test
eric@eric-PC:~/Documents/work/linux-c/opencv$ make
srcpps= ./src/main.cpp
LDFLAGS= -L/lib -L/usr/local/lib -lpthread -lm
OBJS= ./src/main.o
src/main.o...
=============================
main ok
eric@eric-PC:~/Documents/work/linux-c/opencv$ ./main 

(main:109690): Gtk-WARNING **: 10:33:01.532: 无法在模块路径中找到主题引擎:“adwaita”,

(main:109690): Gtk-WARNING **: 10:33:01.533: 无法在模块路径中找到主题引擎:“adwaita”,
-------------------- 图像参数 ----------------------
flags:1124024336
size:240 x 320
clos:320
rows:240
dims:2


Je suppose que tu aimes

Origine blog.csdn.net/pyt1234567890/article/details/109591820
conseillé
Classement