0环境
- ubuntu18.04
- CMAKE
- cuda10.2
- cudnn
开着飞机上谷歌软件,用于下载依赖
0更新 源地质
https://www.cnblogs.com/gooutlook/p/16357113.html
最新已经到opencv3.4.20了
1下载源码
https://github.com/opencv/opencv/releases/tag/3.4.9
https://github.com/opencv/opencv_contrib/releases/tag/3.4.9
0环境
- VS2019
- CMAKE
- cuda11.5
- cudnn
开着飞机上谷歌软件,用于下载依赖
1下载源码
下载源码
https://github.com/opencv/opencv/releases/tag/3.4.9
下载扩展源码
https://github.com/opencv/opencv_contrib/releases/tag/3.4.9
下载文件
下载Opencv编译过程中用得到的文件
链接:https://pan.baidu.com/s/1cstdfwHhofZFMrJoWBIrww?pwd=gl8j
提取码:gl8j
--来自百度网盘超级会员V4的分享
解决cuda报错文件
解决cmake编译过程中缺少文件
分别放到对应文件夹
2安装依赖
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 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 sudo apt-get install -y curl #后面用到 sudo apt-get install -y cmake-gui
3 编译
3-1安装cmake
sudo apt-get install cmake-gui
打开
cmake-gui
3-2 cmake设置编译属性
设置编译源码路径
设置生成build路径
值
选择完毕点击Configure,然后会弹出编译器选项,选择Unix Makefiles即可。
配置完毕如下图所示:
3-3 设置编译选择项
(1)添加cuda (一般不需要 openvslam不用)
cuda10.2一下还算正常,cuda11.0y以上需要修改cmake
cuda10.2的设置
(2)添加扩展库 注意路径 / moudles文件夹
(根据需要)
(3)添加 sifit (根据需要)
(4)world库 不要
(根据需要)
自己的的选择。不要选择,选择了其他分库就很难找到了,相当于所有的库全部变成一个world库,有些工程是单独依赖某一个库合并之后找不到了
(5)选择编译版本
(根据需要)
(6)是否编译python可用的版本(默认选了,但是可不用,python单独安装)
(根据需要)
默认选了
这里我去掉了
(7) 不要java(默认有 根据需求)
这里我取消了
(8)tiff 图像操作
默认没有,需要可以选择,对tiff图像格式操作
(9) 其他
视频流加速
WITH_LIBV4L
(9)设置安装路径(不要设置 就用默认的 不然后面导致很多软件找不到 多版本最好不要搞)
win10生成的就在bulid/install文件夹下,不牵扯多版本共存问题。
ubuntu可能存在多个版本的opencv,默认安装位置 usr/local,
假设已经装了opencv4.5 ,为了避免冲突opecv3.4.9需要新指明路径
CMAKE_INSTALL_PREFIX 安装路径
其他参数参考
说明
1. 其中~/opencv-3.4.1/build/installed
为安装OpenCV3.4.1的路径,这个十分关键。
2. 设置OFF的理由如下,可大大加快编译速度,当然还要根据需求进行设置。
$ cd opencv-3.4.1 $ mkdir build $ cd build $ mkdir installed $ cmake \ -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=~/opencv-3.4.1/build/installed \ \ -DWITH_CUDA=OFF \ \ -DBUILD_DOCS=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_TESTS=OFF \ -DBUILD_PERF_TESTS=OFF \ .. $ make -j4 $ sudo make install
(10)其他选择
(根据需要)
libv4l 默认没有.解决使用opencv 高分辨率下的摄像头卡顿不流畅
sudo apt-get install libv4l-dev
利用OPENCV的CvCapture *cvCaptureFromCAM( int index )来实现,屏蔽掉V4L2底层的繁琐操作,使用opencv调用相机,发现不同设备上采集的图像有很大的区别,如果保持移植的一致性,应该需要考虑v4l2配置相机。
经过对这些库的了解,才发现,最为关键的几个库为ffmpeg以及libv4l,libavcodec。特别是libv4l是直接用来捕获摄像头的库,才能够将cvCaptureFromCAM于真正的设备连接,从而获取视频。
其中,libv4l.so,没有ARM的版本,如果能够在ARM平台下找到libv4l.so的库文件,选上with v4l,我在交叉编译器的目录下没ARM版本的libv4l.so的库
然后点击生成
请注意,开着某飞机上谷歌,而以保证这个过程中下载一些需要的文件,也可以根据后期报错记录,手动下载。
正常会有一些报错。
4 报错问题解决
编译警告1
问题1 如果是cuda11 会 爆出的错误 (别看了没解决 跳过不要编译cuda-opencv)
找不到一堆cuda的东西,cmake无法过去
解决方法:
因为cuda 11移除了nppicom库, 解决方法是,在opencv-x.x.x/cmake/文件夹下,找到OpenCVDetectCUDA.cmake文件,找到下述if(CUDA_FOUND)的位置,在下面加上去掉nppicom的库的指令(中间四行)。
…
.....
if(CUDA_FOUND)
set(HAVE_CUDA 1)
//添加以下四行
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
ocv_list_filterout(CUDA_nppi_LIBRARY "nppicom")
ocv_list_filterout(CUDA_npp_LIBRARY "nppicom")
endif()
if(WITH_CUFFT)
set(HAVE_CUFFT 1)
.....
具体可参照https://github.com/opencv/opencv/pull/17499/files
然后再次configure应该是没有错误了,不要着急点击 generate,先看看还需要增加什么,如果不需要增加,直接略过下一部分。
没有错误后,点击generation,出现以下则完成,进行下面的make。
问题2 缺少没有下载好的库,需要手动下载
开头百度网盘下载的
下载好基本放在3个文件夹,如果有现成的,直接拷贝到要编译的build文件夹
这些都是配置过程中没有自动下载下来的,需要手动去网址下载
一共需要手动下载4组文件
从下载记录找哪些没被下载,手动下载好,放在对应位置
ffmpeg库
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/opencv_ffmpeg.dll
放在
opencv_349/build/3rdparty/ffmpeg/opencv_ffmpeg.dll"
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/opencv_ffmpeg_64.dll
放在
opencv_349/build/3rdparty/ffmpeg/opencv_ffmpeg_64.dll
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/ffmpeg_version.cmake
另存为是txt格式,需要去掉txt
放在
opencv349/opencv_349/build/3rdparty/ffmpeg/ffmpeg_version.cmake
ippicv库 (win10和ubnutu不一样)
ubuntu18(win10这里用的库不一样)
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz
放在
opencv-3.4.9/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz
win10(根据平台选择,针对ubuntu用不着)
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_win_intel64_20180723_general.zip
放在
opencv_349/build/3rdparty/ippicv
然后回自动转移到
opencv_349\.cache\ippicv\1d222685246896fe089f88b8858e4b2f-ippicv_2019_win_intel64_20180723_general.zip
其他库
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i"
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm_bi.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm_hd.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_064.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_128.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_256.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_lbgm.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i
放到
/opencv_349/build/downloads/xfeatures2d/vgg_generated_48.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_64.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_80.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_120.i
人脸检测文件(win10和ubnutu不一样)
手动下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat
win10放到
opencv_349/build/testdata/cv/face//face_landmark_model.dat
unbuntu18放到
opencv-3.4.9/build/share/OpenCV/testdata/cv/face//face_landmark_model.dat"
重新
点击
5 编译代码
在build文件夹下面
sudo make -j4 && sudo make install
编译成功
安装
sudo make install
可以看到安装到了我们制定的位置
注册opencv到系统环境
确保opencv自动注册信息文件存在
# Package Information for pkg-config prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include Name: OpenCV Description: Open Source Computer Vision Library Version: 3.4.9 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_highgui -lopencv_videoio -lopencv_face -lopencv_freetype -lopencv_fuzzy -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_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core Libs.private: -ldl -lm -lpthread -lrt Cflags: -I${includedir_old} -I${includedir_new}
然后手动注册到环境
注册环境变量,输入命令:
sudo gedit /etc/bash.bashrc
打开之后,在文件最后面添加以下内容:
pkg-config --modversion opencv
测试样例
工程文件
CMakeLists.txt
# cmake needs this line cmake_minimum_required(VERSION 3.1) # Define project name project(opencv_example_project) #set(OpenCV_DIR "/usr/local/opencv349") # 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) #include_directories(/usr/local/opencv349/include) #include_directories(/usr/local/opencv349/include/opencv) #include_directories(/usr/local/opencv349/include/opencv2) # 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})
强制指定opencv版本
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 }
编译
cd build
cmake ..
make
./opencv_example