python3.69好像不被opencv4.5支持,反正最后python3.69不能用可以换成 opencv4.4.

 

1下载opencv源码

从github上下载最新的​​opencv​

https://github.com/opencv/opencv/tags

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu

 

 ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_02

 

2下载扩展库源码 

下载完opencv以后再下载​​opencv_contrib​

https://github.com/opencv/opencv_contrib/tags

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_03

 

 

 

将opencv_contrib文件夹移动到opencv文件夹里。然后在opencv文件夹里建立build文件夹,如下图所示:

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_python_04

 

 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_05

 

 

接下来打开终端。进入build文件夹,然后安装环境依赖:

4.5的库



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 libdc1394-22-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev


 

4.4的库



sudo apt-get update



sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
python3 -m pip install --upgrade pip

#直接装不了找不到
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev

sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
sudo apt update
sudo apt-get install -y libjasper1 libjasper-dev

sudo apt-get install -y libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
sudo apt-get install -y curl

#后面用到
sudo apt-get install -y cmake-gui

sudo apt-get update


  

 

 

这里可能遇到一个问题

libjasper-dev找不到,修改源



sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"

sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
sudo apt update
sudo apt install libjasper1 libjasper-dev


  

  

 

 

接下来为了安装方便不容易出错,建议使用cmake-gui安装,安装命令如下:



sudo apt-get install cmake-gui


  

安装完毕打开cmake-gui,命令:



cmake-gui 


在Where is the source code:选择opencv目录位置,在Where to build the binaries:选择build位置如下图所示:

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_06

 

 

 

选择完毕点击Configure,然后会弹出编译器选项,选择Unix Makefiles即可。

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_07

 

 

配置完毕如下图所示:

 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_08

 

 

根据个人需要使用用cuda

如果要用cuda

WITH cuda 必选

其余两个非必须

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_09

 

如果是jetson nx板子 需要制定显卡计算能力,手动选择 add entry 创建这个参数

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_10

 

 

 

 

 

 

 

找到BUILD_opencv_world,不要(反正每次选了这个总有一些以外 py3无法使用)

 

 ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_11

 

 

 

 

 

找到在CMAKE_BUILD_TYPE 值处输入RELEASE,根据需要是否编译DEBUG,其他保持不变;

一般只要  Release

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_python_12

 

 

找到OPENCV_ENABLE_NONFREE,在后面的方框点上勾(有的算法有专利,不点这个不能用,比如sift);

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_13

 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_14

 

 

 

找到OPENCV_EXTRA_MODULES_PATH,选择opencv_contrib文件夹中的modules文件夹,注意是modules文件夹(我的路径是/home/qianbin/opencv/opencv_contrib/modules)。

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_15

 

 

找到后面的方框点上勾;

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_16

 

 

生成python3版本的所有路径信息输入

确保安装了numpy,没有安装就安装,然后关闭cmake重新的打开

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_python_17

 

 

 

 

 

根据需要是否取消python2的编译,找到BUILD_opencv_python2,后面方框点沟掉;

点击Add Entry,添加BUILD_opencv_python3,开启python3的编译。

(opencv4.5 灭有自动出现BUILD_opencv_python3,虽然手动添加但最后python3.69找不到。opencv4.4的源码却自动出现BUILD_opencv_python3,不知道是本版支持问题,还是因为前面选择了opencv_world导致的)

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_18

其他python路径是开始自动读取的,核对下

 

下图是4.4的选择

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_19

 

 

 

 其他选择

WITH_GSTREAMER

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_20

 

 

 WITH_LIBV4L

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_21

 

 

 CMAKE_INSTALL_PREFIX 安装路径

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_22

 

 

 

 

 

 样例是否编译看自己,一般可不用(我自己编译了)

BUILD_TESTS=OFF 

BUILD_PERF_TESTS=OFF 

BUILD_EXAMPLES=OFF  

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_python_23

 

 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_24

 

 

 

 完成以上工作再点击Configure,耐心等一等,如果上面还有红色的再点击Configure,之到没有红色为止。

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_25

 

 

Configure完成之后点击Generate,等一等即可。

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_26

 

 建议先去看额外出错,不容易下载的东西先下载好放在指定文件目录,省去因为这个出错

 

正常情况下,等Generate完成之后,我们可以直接在build目录下输入命令:

 



make


 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_python_27

 

 

 

额外出错

(我在来联想y7000 UBUNTU1804 开启某墙模式下,他自动下载了不用管。)

进行编译工作了。实际上这样很可能出错,我在编译了10分钟后报错了,出错的原因一般都是说缺少什么文件,缺少的文件主要是Cmake在配置时由于网络不好没下载下来。我在位于build下的CmakeDownloadLog.txt可以查看到有哪些文件下载失败。经常下载失败的文件我上传到了网盘,

这些文件我整理了百度网盘便于下载

链接:https://pan.baidu.com/s/1h1geuNg9bdDNiRNpJ6Dq_w

提取码:zht4


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_28

 

 ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_29

 

第一批文件,手动下放在相对路径



opencv-4.5.1/build/downloads/xfeatures2d


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_30

 

 

 

 

 第二批文件 -测试样例所需的人脸模型文件

  



/opencv-4.5.1/build/share/opencv4/testdata/cv/face/"


 

 

 ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_31

 

 

  

 

如果没有务必拷贝到build目录下的downloads/xfeatures2d文件夹里。我在安装时还有一个文件face_landmark_model.dat没有下载成功,将该文件放到build目录下的/share/opencv4/testdata/cv/face目录下,如果没有目录可自行建立。检查拷贝完毕,最好再次Configure一下,直到没有上面没有红色为止,然后再点击Generate。如果不放心可以再次检查日志。

 

最后在build目录下重新输入命令:



make


  

上述过程需要十几分钟甚至更长(取决于机器性能),编译不出错完成之后,出现下图所示界面:

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_32

 

 

 

 

接下来在build目录下输入命令:



sudo make install


  ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_33

 

 

 

即可安装。最后所有文件将被安装到目录“/usr/local/”下面。

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_34

 

 

配置opencv

安装完成后,手动创建opencv.pc:



cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo gedit opencv.pc


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_35

 

 

 

  然后添加:



prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}


 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ubuntu_36

 

 

 

 更改环境变量,输入命令:



sudo gedit /etc/bash.bashrc


  打开之后,在文件最后面添加以下内容:



export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_#include_37

 

 

 

 保存退出,opencv基本上就安装完成了。通过 pkg-config 查看 opencv 版本:



pkg-config --modversion opencv


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_38

 

 小程序测试

找到 opencv-4.5.1/samples/cpp/example_cmake 目录下,官方已经给出了一个cmake的example,我们可以拿来测试下。按顺序执行:



cmake .
make
./opencv_example


  即可看到打开了摄像头,在左上角有一个hello opencv ,即表示配置成功。

 

 

工程文件


ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_ide_39

 

 CMakeLists.txt



# cmake needs this line
cmake_minimum_required(VERSION 3.1)

# Define project name
project(opencv_example_project)

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " config: ${OpenCV_DIR}")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")

# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)

# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})


  

example.cpp



#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void drawText(Mat & image);

int main()
{
cout << "Built with OpenCV " << CV_VERSION << endl;
Mat image;
VideoCapture capture;
capture.open(0);
if(capture.isOpened())
{
cout << "Capture is opened" << endl;
for(;;)
{
capture >> image;
if(image.empty())
break;
drawText(image);
imshow("Sample", image);
if(waitKey(10) >= 0)
break;
}
}
else
{
cout << "No capture" << endl;
image = Mat::zeros(480, 640, CV_8UC1);
drawText(image);
imshow("Sample", image);
waitKey(0);
}
return 0;
}

void drawText(Mat & image)
{
putText(image, "Hello OpenCV",
Point(20, 50),
FONT_HERSHEY_COMPLEX, 1, // font face and scale
Scalar(255, 255, 255), // white
1, LINE_AA); // line thickness and type
}


  

编译

​cmake .​


​make​


​./opencv_example​


 

ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1_2d_40

 

 

 

 

 

 

 安装完成后进行python测试

4.5没成功,我直接装了 pip install python-opencv 装了扩展库

4.4 jetson nx板子安装成功

python3直接调用

c++需要配置下到系统,然后可以调用

推荐以后用4.4 +扩展库 编译。