Ubuntu Clion使用Cmake 配置 opencv開發(fā)。系列一。

作為個(gè)人 Linux/Ubuntu 下C++ 開發(fā)博客系列第一篇,主要介紹使用,在集成開發(fā)環(huán)境Clion下,配置加載獨(dú)立編譯的opencv庫,并對(duì)相應(yīng)的圖片進(jìn)行處理。本文主要包含一下幾個(gè)步驟。

1.Ubuntu 下opencv的編譯安裝。

    1. opencv 下載
    1. opencv 編譯安裝
    1. opencv 編譯測(cè)試

2.Clion 內(nèi)CMakeLists.txt 配置加載opencv。

    1. CMakeLists.txt 配置opencv
    1. opencv Demo

1.Ubuntu 下opencv 的編譯安裝。

1.opencv 下載。

訪問到opencv 的 github 主頁,進(jìn)入release 頁面,選擇對(duì)應(yīng)版本的 opencv源碼,進(jìn)行下載。在本例中,作者下載使用的是opencv 3.4.0

opencv download

2. opencv 編譯安裝

解壓出下載的源碼文件,在解壓出來的根目錄內(nèi)創(chuàng)建build目錄,用來保持cmake 的中間文件。


2019-12-16-14-20.png

cd 到build目錄內(nèi),使用cmake 對(duì)opencv進(jìn)行編譯。

cmake -D CMAKE_BUILD_TYPE=RELEASE 
-D CMAKE_INSTALL_PREFIX=/home/xxx/Downloads/tmps/tmp 
-D WITH_GPHOTO2=OFF
-D WITH_GTK=OFF 
-D WITH_CUDA=OFF 
-D WITH_FFMPEG=OFF 
-D WITH_LAPACK=OFF 
-D ENABLE_CXX11=ON
..

命令行參數(shù)解釋:

  • CMAKE_INSTALL_PREFIX: opencv的安裝路徑。后期make install 后opencv的最終安裝地址。
  • WITH_GPHOTO2: 關(guān)閉gphotos
  • WITH_GTK:關(guān)閉gtk
  • WITH_CUDA: 關(guān)閉CUDA
    ..
  • ENABLE_CXX11:開啟CXX11
    通過開啟/關(guān)閉對(duì)應(yīng)的編譯依賴選項(xiàng),降低編譯復(fù)雜度/開啟對(duì)應(yīng)的功能。
編譯opencv

編譯opencv

make:


make

其中 “-j12” 參數(shù),12 是為了使用并行的CPU 核心數(shù)。和CPU核數(shù)相關(guān),可根據(jù)具體數(shù)量進(jìn)行調(diào)整。


make

make 完畢后,運(yùn)行make install 進(jìn)行安裝opencv。(若安裝地址在非當(dāng)前用戶權(quán)限 需要使用sudo make install 進(jìn)行安裝)。


make install

make install

隨后可以在編譯選項(xiàng)“-D CMAKE_INSTALL_PREFIX=/home/xxx/Downloads/tmps/tmp ” 所制定的目錄內(nèi)看到安裝好的opencv文件。


opencv installed

1. opencv 編譯測(cè)試

在用戶的 .zshrc/.bashrc 文件內(nèi)添加以下參數(shù),添加opencv到用戶環(huán)境中。

#add opencv 3.4.0
export PATH=/home/xxx/Downloads/tmps/tmp/bin:$PATH
export LD_LIBRARY_PATH=/home/xxx/Downloads/tmps/tmp/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/xxx/Downloads/tmps/tmp/lib/pkgconfig

以上路徑,要根據(jù)自己的安裝路徑進(jìn)行更改。

cd 到源碼路徑 “opencv-3.4.0/samples/cpp”內(nèi)。運(yùn)行以下指令編譯,嘗試編譯其中的人臉識(shí)別示例程序。

gcc `pkg-config --cflags opencv` -o facedetect facedetect.cpp `pkg-config --libs opencv` -lstdc++
gcc

在上面的cpp目錄內(nèi),輸入以下命令,可以看到opencv 檢測(cè)出來的人臉圖片。

./facedetect ../data/lena.jpg
face detect

到此,完成了在Ubuntu下 opencv的 源碼編譯和安裝。

2.Clion 內(nèi)CMakeLists.txt 配置加載opencv。

1. CMakeLists.txt 配置opencv

在clion 的cpp工程中,對(duì)CMakeLists.txt 添加以下代碼,加載opencv

# Where to find CMake modules and OpenCV
set(OpenCV_DIR "/home/xxx/Downloads/tmps/tmp/opencv-3.4.0/share/OpenCV")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(learn_cpp ${SOURCE_FILES})

# add libs you need
set(OpenCV_LIBS opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
# or add all
# include_directories(${OpenCV_INCLUDE_DIRS})

# linking
target_link_libraries(learn_cpp ${OpenCV_LIBS})

其中,在set(OpenCV_DIR "/home/xxx/Downloads/tmps/tmp/opencv-3.4.0/share/OpenCV") 用來指定opencv的安裝目錄,這個(gè)路徑并不是安裝的時(shí)候指定的CMAKE_INSTALL_PREFIX=/home/xxx/Downloads/tmps/tmp,而是更下一級(jí)的share/OpenCV 目錄。如果指定了安裝配置的路徑,那么就不能正確的導(dǎo)入模塊。

2. opencv Demo

在工程內(nèi)添加代碼,對(duì)圖片進(jìn)行下方和右方的填充。
效果如下:


result

部分填充源碼:
utils.cpp

#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int ImgPorcess(char *imgPath) {
    cout << "ss" << endl;
    Mat src, dst;
    char *window_name = "copyMakeBorder Demo";

    src = imread(imgPath);
    if (!src.data) {
        cerr << "Can't open the image!" << endl;
        return EXIT_FAILURE;
    }

    namedWindow(window_name);
    cout << src.rows << endl;
    cout << src.cols << endl;
    dst = src;


    while (true) {
        waitKey(500);
        copyMakeBorder(src, dst, 0, 10, 0, 20, BORDER_CONSTANT, 0);
        imshow(window_name, dst);
    }

}

End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容