LinuxOpencvのコンパイルとインストール

OpenCVは、Linux、Windows、Android、およびMac OSオペレーティングシステムで実行できるBSDライセンス(オープンソース)に基づくクロスプラットフォームのコンピュータービジョンおよび機械学習ソフトウェアライブラリです。軽量で効率的です。一連のC関数と少数のC ++クラスで構成され、Python、Ruby、MATLABなどの言語へのインターフェイスも提供し、画像処理とコンピュータービジョンで多くの一般的なアルゴリズムを実装します。

  1. 依存ライブラリをインストールする

開発にのみ使用する場合は、既製のライブラリを直接インストールできます

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. 新しいディレクトリビルド
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. ビルドディレクトリに入り、コンパイルパラメータを設定します[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. 作る
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