多個版本opencv的呼叫方法

2021-10-09 07:40:51 字數 2603 閱讀 4772

關鍵檔案:opencvconfig.cmake。在opencv編譯好後,所在目錄中一般會有乙個叫opencvconfig.cmake的檔案,這個檔案中指定了cmake要去**找opencv,其.**件在**等,比如其中一行:

# provide the include directories to the caller 

set(opencv_include_dirs "/home/ubuntu/src/opencv-3.1.0/build" "/home/ubuntu/src/opencv-3.1.0/include" "/home/ubuntu/src/opencv-3.1.0/include/opencv")

只要讓cmake找到這個檔案,這個檔案就指定了opencv的所有路徑,因此設定opencv_dir為包含opencvconfig.cmake的目錄,如在c++工程cmakelists.txt中新增:

set(opencv_dir "/home/ubuntu/src/opencv-3.1.0/build")
因此,我們期望使用哪個版本的opencv,只要找到對應的opencvconfig.cmake檔案,並且將其路徑新增到工程的cmakelists.txt中即可了。

關鍵檔案:opencv.pc 。在makefile下,應該是可以在其中詳細設定opencv路徑,要使用到哪些庫等等(我沒有仔細學習過makefile的使用)。在此,我想介紹一種簡單的在makefile下指定期望使用的opencv版本的方法,該方法借助linux下pkg-config命令。

我們常常使用pkg-config --modversion 來檢視指定庫的版本,比如檢視opencv版本pkg-config --modversion opencv。其實pkg-config顯示的資訊來自於這個庫對應的.pc檔案,比如安裝了opencv後,我們可以在/usr/lib/pkg-config/ 資料夾下找到opencv.pc,內容如下:

# package information for pkg-config 

prefix=/usr exec_prefix=$ libdir=$/lib includedir_old=$/include/opencv includedir_new=$/include name: opencv description: open source computer vision library version: 2.4.12.2 libs: -l$/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lopencv_detection_based_tracker -lopencv_esm_panorama -lopencv_facedetect -lopencv_imuvstab -lopencv_tegra -lopencv_vstab -l/usr/local/cuda-7.0/targets/armv7-linux-gnueabihf/lib -lcufft -lnpps -lnppi -lnppc -lcudart -ltbb -lrt -lpthread -lm -ldl cflags: -i$ -i$

當然,我們也可以使用

pkg-config --cflags opencv pkg-config --libs opencv
common+= -dopencv cflags+= -dopencv ldflags+= `pkg-config --libs opencv` common+= `pkg-config --cflags opencv`
此時makefile對應的工程使用的opencv庫即為opencv.pc檔案中所指的版本。本例中為2.4.12.2。

那麼可以容易想到,如果在/usr/lib/pkgconfig資料夾目錄下新增opencv-3.1.0.pc檔案,是否就可以將版本指向opencv-3.1.0l了呢?答案是肯定的,可以將pc檔案拷貝到/usr/lib/pkgconfig資料夾底下,例如上面重新命名為opencv-3.1.0.pc,則可以採用以下的方式來進行檢視和呼叫該opencv版本:pkg-config --modversion opencv-3.1.0

pkg-config --cflags opencv-3.1.0 pkg-config --libs opencv-3.1.0
只是將pc檔案進行了拷貝還不能確保,編譯完成的**在執行的時候能否正確鏈結到庫,如果ldd編譯完成的檔案之後發現opencv的庫not found時需要在/etc/ld.so.conf.d底下新建乙個檔案opencv.conf,

並將opencv的編譯庫路徑放進去,例如:

/home/smile/opencv3.4.0/build/lib
然後sudo ldconfig,之後再去執行編譯的檔案就可以正常執行了; 

Ubuntu安裝多個版本的Opencv

參考 將該博主的某一部分摘錄出來 lsdslam 中的opencv版本 這裡我簡單交代一下我曲折的編譯之路。然後再給出正確方法。首先說一下 opencv 版本的問題,之前跑另乙個程式需要opencv3,那時候沒玩過這,也不懂,就按預設路徑安裝了 opencv3.1.0,然後它自己就裝到了 usr l...

關於多個版本python的切換呼叫

借用py的乙個引數來呼叫不同版本的python。py 2呼叫python2,py 3呼叫的是python3.然後如果用pip py 2 m pip install lxml py 3 m pip install lxml 執行.py檔案 兩種方法。1 py 2 檔名 py 3 檔名 2 你直接在指令...

OpenCV多版本安裝時方法

opencv在ubuntu下經常會安裝多個版本,比如預設版本,自己安裝的,ros安裝的等等。有時候需要給程式指定某個opencv版本,網上有一些方法,但還是會遇到很多問題。這裡提供一種選擇,即指定opencv目錄及opencvconfig目錄,保證能在正確的路徑下尋找opencvconfig.cma...