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.
- 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
- 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
- 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
- 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$
- 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
- 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$
- 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$
- 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)
- 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