Linux Opencv编译安装

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  1. 安装依赖库

如果仅仅开发使用,则直接安装现成的lib即可

sudo apt-get install libopencv-dev python-opencv

编译需要的依赖库

  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,如果无法安装,可以暂时先不安装

  1. 下载源码
eric@eric-PC:~/Documents/work/linux$ git clone https://gitee.com/mirrors/opencv.git

进入opencv目录,切换分支4.5.0

eric@eric-PC:~/Documents/work/linux/opencv$ git checkout -b 4.5.0
  1. 新建目录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. 进入build目录,配置编译参数【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

如果出现如下提示

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

说明libcurl.so冲突了

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

删除多余的libcurl.so.4,即可

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. 查看opencv是否安装成功
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

提示 opencv.pc 没有找到(理论上应该自动会生成,但是不知为何没有自动生成,那就手动添加吧!)

  • 新建/usr/local/lib/pkgconfig/opencv.pc,内容如下:
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
  • 测试
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. 编写测试程序
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. 运行测试程序
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


猜你喜欢

转载自blog.csdn.net/pyt1234567890/article/details/109591820