開始使用OpenCV
1. 編譯OpenCV
1.1 使用命令列的方式配置OpenCV
OpenCV官網教程
OpenCV官網教程使用命令列的方式進行配置,寫的很詳細,按照教程操作,一般都能成功,由于國內訪問GitHub不穩定,所以推薦使用wget獲取OpenCV原始碼壓縮包,這樣比較快,
- OpenCV的CMAKE的預定義的變數
cmake
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules
-DBUILD_NEW_PYTHON_SUPPORT=ON
-DHAVE_opencv_python3=ON
-DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8
...
為了輔助OpenCV專案編譯,CMAKE系統預定義了很多變數,如上所示就是預定義變數中的一小部分,
這些變數影響著OpenCV的編譯(影響生成的Makefile檔案),可以在OpenCV原始碼根目錄下的CMakeLists.txt中找到這些變數的名字和作用,下面是Python3相關的定義引數:

cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master
使用命令列的方式配置OpenCV,可以在執行cmake命令的同時,更改cmake變數的值,或者添加新的cmake變數,
比如我們可以配置Python3的numpy模塊的路徑值,并將Python3設定為默認的Python解釋器:
cmake -DBUILD_opencv_python2=OFF -DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8 -DPYTHON3_NUMPY_INCLUDE_DIRS=/home/fhc/.local/lib/python3.8/site-packages/numpy/core/include -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master
# 不編譯Python2介面
-DBUILD_opencv_python2=OFF
# 設定默認的Python解釋器為Python3
-DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8
# 設定Python3的numpy頭檔案的路徑
-DPYTHON3_NUMPY_INCLUDE_DIRS=/home/fhc/.local/lib/python3.8/site-packages/numpy/core/include
執行cmake命令后,cmake系統會去配置OpenCV編譯選項并最終生成Makefile,
1.2 使用CMAKE圖形界面配置OpenCV
- 啟動cmake-gui
$ mkdir build && cd build
$ cmake-gui
執行cmake-gui命令后,將會彈出如下配置視窗:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nMSQSfWf-1628413931493)(./img/opencv_cmake_gui.png)]
配置完成后,如下圖所示:

上圖界面中的資訊是cmake-gui通過讀取OpenCV原始碼根目錄下的CMakeLists.txt檔案生成的,這里列出的是CMakeLists.txt檔案中已經定義的變數,
CMakeLists.txt檔案中還參考了其他變數,但是沒有定義,若要使用,需要我們自己添加(Add Entry),
這里顯示紅色并不是錯誤,而是表示:CAMKE配置后出現的新的CMAKE變數,可以看到紅色區域下方有一行字:
Press Configure to update and display new values in red
在這里可以修改CMAKE的變數值,也可以點擊 Add Entry按鈕(紅色區域右上方),添加新的CMAKE變數,比如我們可以配置Python3的numpy模塊的路徑值,并將Python3設定為默認的Python解釋器:
- 不編譯Python2介面
取消BUILD_opencv_python2選項的選擇,如下圖所示:

- 配置默認的Python解釋器為Python3,并設定Python3的numpy路徑

配置完成后,點擊Generate即可生成Makefile檔案
1.3 為什么能以上面的方式配置Python3介面呢?
CMAKE是OpenCV原始碼的構建工具,那么如何配置OpenCV原始碼,當然是從分析CMakeLists.txt檔案開始,
下面我們來分析下配置Python3介面的程序,
- OpenCV原始碼根目錄CMakeLists.txt檔案
# ========================== python ==========================
if(BUILD_opencv_python2)
status("")
status(" Python 2:")
...(N lines are omitted here)
endif()
if(BUILD_opencv_python3)
status("")
status(" Python 3:")
...(N lines are omitted here)
endif()
status("")
status(" Python (for build):" PYTHON_DEFAULT_AVAILABLE THEN "${PYTHON_DEFAULT_EXECUTABLE}" ELSE NO)
可以看出
BUILD_opencv_python2
和
BUILD_opencv_python3
這兩個CMAKE變數決定著Python介面是否被編譯,當這兩個變數為true時,相應的介面將會被編譯,否則將不會被編譯,
PYTHON_DEFAULT_EXECUTABLE
這個CMAKE變數決定著默認的Python解釋器,
- cmake/OpenCVDetectPython.cmake
if(PYTHON_DEFAULT_EXECUTABLE)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
elseif(PYTHON2_EXECUTABLE AND PYTHON2INTERP_FOUND)
# Use Python 2 as default Python interpreter
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON2_EXECUTABLE}")
elseif(PYTHON3_EXECUTABLE AND PYTHON3INTERP_FOUND)
# Use Python 3 as fallback Python interpreter (if there is no Python 2)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON3_EXECUTABLE}")
endif()
從上可以看出,當PYTHON_DEFAULT_EXECUTABLE沒有定義時,將優先使用Python2,
1.4 編譯安裝OpenCV
- 編譯
make -j4
- 安裝
make install
編譯程序很漫長 …
2. OpenCV編程
2.1 第一個OpenCV程式
OpenCV官網第一個例程
按照官網的描述操作即可,下面貼出原始碼,方便實驗:
- DisplayImage.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
- CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
- 編譯執行
$ mkdir build && cd build
$ cmake ..
$ make
$ wget https://docs.opencv.org/master/GCC_CMake_Example_Tutorial.jpg
$ ./DisplayImage GCC_CMake_Example_Tutorial.jpg

2.2 CMakeLists.txt解讀
# cmake needs this line
cmake_minimum_required(VERSION 2.8)
# Define project name
project(opencvTest)
# 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)
# 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 "version: ${OpenCV_VERSION}")
message(STATUS "libraries: ${OpenCV_LIBS}")
message(STATUS "include path: ${OpenCV_INCLUDE_DIRS}")
# Add OpenCV headers location to your include paths
include_directories(${OpenCV_INCLUDE_DIRS})
# Declare the executable target built from your sources
add_executable(main main.cpp)
# Link your application with OpenCV libraries
target_link_libraries(main ${OpenCV_LIBS})
更多精彩內容,請關注微信公眾號“邊緣智能實驗室”

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293273.html
標籤:其他
