解決ubuntu16.04 opencv2與opencv3共存問題
問題描述
由於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那裡選。
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
第一篇教程寫的很詳細,我基本上是按照他的步驟來的,但是最後出現了一點問題,之後根據第二篇教程改了一點點,問題成功解決!(哈哈哈其實我也是亂試的~)
相關文章
- 解決元件化中 ModuleApplication 共存問題元件化APP
- 不修改任何檔案,完美解決QQ與360共存問題
- ubuntu16.04解決播放swf視訊檔案問題Ubuntu
- mysql多版本共存問題MySql
- Ubuntu16.04中禁用UTC解決雙系統時間問題Ubuntu
- 磁碟問題定位與解決
- 解決「問題」,不要解決問題
- ApacheStorm官方文件——問題與解決ApacheORM
- Ubuntu16.04使用者登入介面死迴圈問題的解決Ubuntu
- 解決訪問 GitHub 與 clone 很慢的問題Github
- 解決訪問Github與clone很慢的問題Github
- 快取穿透問題與解決方法快取穿透
- 今天遇到的問題與解決方法
- 解決問題
- 解決叢集 Yellow 與 Red 的問題
- @AllArgsConstructor與@Value共用的問題解決Struct
- thymeleaf手動渲染@{}的問題與解決
- java學習中問題與解決方式Java
- Ajax跨越問題原因分析與解決思路
- iOS Unable to boot simulator的問題與解決iOSboot
- zt_enqueue:HW問題分析與解決ENQ
- Error in GetCurrentDir(): 13 問題分析與解決Error
- PHP5.2以上版本及其IIS與Apache2.2的共存問題PHPApache
- 發現問題,解決問題
- yum問題解決
- sqlitedabaseislocked問題解決SQLite
- dump 解決問題
- 解決django 2.2與mysql相容性問題DjangoMySql
- mysql主從複製配置與問題解決MySql
- 深度學習-在ubuntu16.04安裝CUDA9.1-總結(問題完全解決方案)深度學習Ubuntu
- 第十篇:非均衡分類問題的思考與問題與解決思路
- Django在Linux上uwsgi 與nginx的問題與解決DjangoLinuxNginx
- python 3.6.2 安裝與執行 Scrapy 問題與解決Python
- 提問題比解決問題更重要
- Go 模組存在的意義與解決的問題Go
- 舊專案 TypeScript 改造問題與解決方案記TypeScript
- Bigkey問題的解決思路與方式探索
- Java 8 的日期與時間問題解決方案Java