ubuntu16.04下opencv2和opencv3共存

OpenCV二系和三系不是简单地三系就比二系新,比二系好的关系,两个版本主要是接口不同,而两个版本都在维护更新。同时安装两个版本在使用时需要在CmakeLists.txt中调用时需要进行区分。

查看opencv版本
pkg-config --modversion opencv

下载安装包, unzip解压, 先安装依赖项, 依赖项可参考(https://blog.csdn.net/xbs150/article/details/77840786)
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libopenexr-dev libtbb-dev libgstreamer-plugins-base1.0-dev libjasper-dev

上github/opencv下安装包, 和第三方库
在解压后的安装包下mkdir build && cd build
创建目标安装文件夹sudo mkdir /usr/local/bin/opencv-2.4.13.6

cmake并避免掉CUDA影响
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_CUBLAS=0 -D WITH_CUDA=0 -D WITH_CUFFT=0 -D CMAKE_CXX_STANDARD=11 -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.10 ..
-D WITH_TBB=ON -D WITH_V4L=ON
或者支持CUDA的代码
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_CUBLAS=1 -D WITH_CUDA=ON -D WITH_CUFFT=1 -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_X11=ON -D WITH_GSTREAMER=ON -D WITH_IPP=OFF -D BUILD_opencv_cudalegacy=OFF -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 -D CUDNN_LIBRARY=/usr/local/cuda-9.0/lib64 -D CUDNN_INCLUDE_DIR=/usr/local/cuda-9.0/include -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.5/modules -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.5 ..

也可指定python版本并添加很多安装项(未知意义)

cmake -D CMAKE_BUILD_TYPE=RELEASE -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D BUILD_EXAMPLES=ON -D WITH_FFMPEG=ON -D WITH_LIBV4L=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D WITH_OPENCL=ON -D WITH_OPENMP=ON -D WITH_ZLIB=ON -D BUILD_PNG=ON -D BUILD_JPEG=ON -D BUILD_TIFF=ON -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_LAPACK=OFF -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.6 -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=$(which python) -DPYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

若缺少gstreamer参考(https://answers.opencv.org/question/95734/cmake-not-picking-gstreamer-on-ubuntu/)
其余可参考(https://www.cnblogs.com/yuanlibin/p/7735274.html)
(http://www.zsxrpd.com/blog/?p=671)(https://blog.csdn.net/djstavaV/article/details/86884165)

-j4代表开4个线程, 加快速度
sudo make -j4
sudo make install
还需要修改环境变量
vim ~/.bashrc
在后面追加
export PKG_CONFIG_PATH=/usr/local/bin/opencv-2.4.13.6/lib/pkgconfig${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/usr/local/bin/opencv-2.4.13.6/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
这时使用命令已变成2.4
pkg-config --modversion opencv

首先把对应的路径弄清楚了,然后在CMakeList.txt才可以进行对应的设定

set(OpenCV_DIR /usr/local/bin/opencv-3.4.5/share/OpenCV)
find_package(OpenCV 3.4 REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/bin/opencv-3.4.5/include)
link_directories(${OpenCV_LIBRARY_DIRS} /usr/local/bin/opencv-3.4.5/lib))

当你想返回使用默认的opencv2时,将find_package(OpenCV 3.4 REQUIRED )换成find_package(OpenCV REQUIRED )即可,并将该代码上面一行和下面俩行注释即可。

缺少.so库

缺少.so库时使用ldd main查看缺哪些库, locate对应的库名, 然后vim /etc/ld.so.conf.d/opencv.conf, 在里面添加库的路径(/lib), 之后sudo ldconfig
对于编译不成功的可能是库找的不对, 使用如下命令即可

g++ -o test_1 test_1.cpp `pkg-config opencv --cflags --libs`

简便方法(不推荐使用)

使用pip安装opencv3 (pip无opencv2)
pip install opencv-python==3.4.5.20
使用apt-get安装opencv2:

  • 在Ubuntu14.04和16.04下一般运行
    sudo apt-get install libopencv-dev
    安装2.4系列OpenCV,然后在官网下载安装三系OpenCV。
  • 而在Ubuntu18.04中 sudo apt-get install libopencv-dev 安装的OpenCV版本为3.2,还是有一些区别的。

使用apt-get安装opencv2对应的库lib在 /usr/lib/x86_64-linux-gnu/,头文件include在/usr/include/opencv和/usr/local/include/opencv2中, 需对应的在CMakeList.txt中修改.

pip输出环境包需求到requirements.txt

pip freeze | grep -v "pkg-resources" > requirements.txt

opencv2.x和opencv3.x的区别

  1. cv.CV_RGB2LAB变COLOR_RGB2Lab
import cv2 as cv
cv.cv.CV_RGB2Lab   # opencv2
cv.COLOR_RGB2Lab     # opencv3
  1. cv2.cvBoxPoints变cv2.boxPoints
box = np.array(cv2.cv.BoxPoints(rect))  # opencv2
box = np.array(cv2.boxPoints(rect))       # opencv3
  1. cv2.cv.CV_RETR_CCOMP变cv2.RETR_CCOMP
mode=cv2.cv.CV_RETR_CCOMP,   # opencv2
mode=cv2.RETR_CCOMP,            # opencv3
  1. cv2.cv.CV_CHAIN_APPROX_SIMPLE变cv2.CHAIN_APPROX_SIMPLE
method=cv2.cv.CV_CHAIN_APPROX_SIMPLE   # opencv2
method=cv2.CHAIN_APPROX_SIMPLE            # opencv3

cv2扩展库是针对OpenCV 2.x API创建的,直接采用NumPy的数组对象表示图像,和pyopencv相比,不再需要在数组和Mat对象之间相互转换了。

cv2的函数直接对Numpy数组进行操作,
cv2读取图像是数组,array = cv2.imread()
(1)cv读取图像:
iplimage = cv.LoadImage()
<type 'cv2.cv.iplimage'>
<iplimage(nChannels=3 width=1212 height=824 widthStep=3636 )>
cvmat = cv.LoadImageM()
<type 'cv2.cv.cvmat'>
<cvmat(type=42424010 8UC3 rows=824 cols=1212 step=3636 )>
(2)array, iplimage, cvmat 转换
array------> cvmat: cv.fromarray(array)
cvmat------> array: np.asarray(cvamt)
cvmat------> iplimage: cv.GetImage(cvmat)
iplimage----> cvmat: iplimage[:], 或 cv.GetMat(iplimage)

加速图片decode

  1. 可以使用jpeg4py库, 内部封装了libjpeg-turbo
  2. 手动编译opencv, 替换libjpeg库为libjpeg-turbo
  3. 编译支持CUDA的opencv, 使用cuda去做图片处理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351