Linux Opencv compilation and installation

OpenCV is a cross-platform computer vision and machine learning software library based on the BSD license (open source) that can run on Linux, Windows, Android and Mac OS operating systems. It is lightweight and efficient—consisting of a series of C functions and a small number of C++ classes, it also provides interfaces to languages ​​such as Python, Ruby, and MATLAB, and implements many common algorithms in image processing and computer vision.

  1. Install dependent libraries

If you only use it for development, you can install the ready-made lib directly

sudo apt-get install libopencv-dev python-opencv

Compile the required dependent libraries

  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, if it cannot be installed, you can not install it temporarily

  1. Download source code
eric@eric-PC:~/Documents/work/linux$ git clone https://gitee.com/mirrors/opencv.git

Enter the opencv directory, switch branch 4.5.0

eric@eric-PC:~/Documents/work/linux/opencv$ git checkout -b 4.5.0
  1. New directory build
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. Enter the build directory and configure the compilation parameters [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. make
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

If the following prompt appears

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

Explain that libcurl.so conflicts

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

Delete the redundant libcurl.so.4, you can

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 make install
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. Check whether opencv is installed successfully
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

Prompt that opencv.pc is not found (in theory, it should be automatically generated, but for some reason it is not automatically generated, then add it manually!)

  • Create a new /usr/local/lib/pkgconfig/opencv.pc with the following content:
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
  • test
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. Write test program
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. Run the test program
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


Guess you like

Origin blog.csdn.net/pyt1234567890/article/details/109591820