解決ubuntu16.04 opencv2與opencv3共存問題

xb_zed發表於2020-12-18

問題描述

由於OpenCV3在OpenCV2的基礎上改動比較大,且向下支援不夠好,所以,很多老工程需要用OpenCV2,而新工程又僅支援OpenCV3。如果兩者同時安裝也不衝突,本質上也就是一些三方庫,放在/usr/local/lib下面,但是如果使用FIND_PACKAGE(OpenCV REQUIRED)的時候,其本質是去/usr/local/share下面尋找cmake檔案,而兩個版本的cmake檔案同名,所以必然時後安裝的版本覆蓋之前安裝版本的cmake檔案,這樣一來使用起來就不太方便了(需要修改成普通的新增三方庫的方法來使用),下面分享一個小方法使得其可以更方便使用。
預設大家已經有自己編譯安裝好的OpenCV(這裡假設是OpenCV2)

一、opencv與contrib下載

下載OpenCV3的原始碼 opencv3.4.3和contrib

先去github上下載對應的opencv版本和opencv_contrib版本,我下載的是opencv3.4.3,所以contrib也要下載3.4.3版本注意!版本一定一定一定一定要對應!要選擇版本是在左上角Tag那裡選。
下載opencv
tag:3.4.3那裡找你要的版本

二、opencv3和contrib安裝

1.安裝依賴

$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

依賴安裝完成後,把contrib資料夾放入opencv目錄下,並且建立build資料夾

在這裡插入圖片描述
這裡為了方便我把資料夾重新命名為opencv,contrib資料夾也重新命名了。

2. 安裝cmake-gui

網上大部分教程都是命令列直接安裝,但是那串命令很多教程寫的都不一樣,感覺對我這樣的新手來說還是直接圖形介面安裝方便,只需要滑鼠點幾下就好了,避免出錯。

sudo apt-get install cmake-gui

3.安裝配置opencv3

安裝好之後,進入opencv資料夾裡面的build資料夾,在這裡開啟終端,輸入:

$cmake-gui ..

就會開啟gui介面。
在這裡插入圖片描述
確定路徑沒問題之後點選configure選擇Unix Makefiles,其餘預設,點選finish。需要下載一些檔案,要等待一段時間。然後CMake即載入預設配置,如下圖所示:
在這裡插入圖片描述
這裡需要對兩個地方進行修改:
(1)在CMAKE_BUILD_TYPE 值處輸入RELEASE,其他保持不變(如果已經存在就不必修改)。
下方的CMAKE_INSTALL_PREFIX顯示了預設的安裝目錄,生成makefile檔案最後執行 make install時就會安裝到這個目錄,這裡可以根據個人需求更改。但是建議就按照預設路徑來,不要亂改!(這裡選擇的安裝為build資料夾下的installed(自己建的)
在這裡插入圖片描述

在這裡插入圖片描述
(2)在OPENCV_EXTRA_MODULES_PATH處,選擇輸入目錄(單擊這一行後方空白處即可選中)
接著選擇opencv_contrib資料夾中的modules資料夾,注意,不是隻選中opencv_contrib資料夾就好了,需要點進去選中裡面的modules資料夾! 如下圖所示,我從左側echo裡進去選的,大家從自己安裝位置選擇就好。然後點Choose。
在這裡插入圖片描述

接著,這個過程需要一段時間,耐心等待一下。
另外需要在BUILD_opencv_world後面打√
在這裡插入圖片描述
然後configure兩次,變白色,再Generate生成配置檔案
在這裡插入圖片描述
完成之後可以退出cmake-gui,在build目錄下輸入make,如下圖所示:
在這裡插入圖片描述
看到100%就是成功啦!開森!!!!
最後sudo make install,在對應目錄下就有OpenCV3的標頭檔案和庫檔案了。

多版本OpenCV切換

到這裡就將現版本的OpenCV3和原有版本的OpenCV2安裝在不同的目錄,相對應的cmake檔案也被安裝在不同目錄。那麼在CMakeLists檔案裡面使用OpenCV3時,在FIND_PACKAGE(OpenCV REQUIRED)的前面,加上set(OpenCV_DIR "/home/xiong/opencv-3.4.3/opencv-3.4.3/build")
這樣系統就能夠找到OpenCV3的標頭檔案和庫了,
示例如下:

project( test )
 set(CMAKE_CXX_FLAGS "-std=c++11")#新增支援c++11標準
 cmake_minimum_required(VERSION 2.6)#要求的CMAKE最低版本號為2.6
 set(OpenCV_DIR "/home/xiong/opencv-3.4.3/opencv-3.4.3/build")
 find_package( OpenCV REQUIRED ) 
 include_directories( ${OpenCV_INCLUDE_DIRS} )
 add_executable( test test.cpp ) 
 target_link_libraries( test ${OpenCV_LIBS} )

若要使用opencv2,CMakeLists中應該寫:

#set(CMAKE_BUILD_TYPE "Debug")
PROJECT(speed_detection)#工程名為speed_detection,修改成自己的
cmake_minimum_required(VERSION 2.6)#要求的CMAKE最低版本號為2.6
set(OpenCV_DIR /home/xiong/opencv-2.4.9/release)#若CMAKE找不到opencv需要新增這一項,讓opencv路徑指向build資料夾(這裡是release資料夾)
find_package(OpenCV REQUIRED)#找opencv庫
include_directories( ${OpenCV_INCLUDE_DIRS} )#包含路徑
add_executable(speed_detection main.cpp)#新增可執行檔案main.cpp
target_link_libraries(speed_detection ${OpenCV_LIBS})#工程連結opencv庫

target_link_libraries( test ${OpenCV_LIBS} )

到這裡,舉一反三即可。
https://blog.csdn.net/jindunwan7388/article/details/80397700
https://blog.csdn.net/m0_37797953/article/details/82013509

第一篇教程寫的很詳細,我基本上是按照他的步驟來的,但是最後出現了一點問題,之後根據第二篇教程改了一點點,問題成功解決!(哈哈哈其實我也是亂試的~)

相關文章