【opencv基礎】linux系統opencv以及opencv_contrib的安裝與使用

前言html

本文主要介紹如何在linux系統安裝使用opencv.python

具體步驟可參考opencv官網here.linux

步驟ios

編譯源碼以前須要安裝相關依賴庫;git

1.下載源碼;github

2.解壓源碼;web

3.配置cmake;ide

注意將配置的錯誤文件刪除,以及cmake目錄;測試

4.編譯連接;ui

5.安裝庫;

Required Packages

[compiler] sudo apt-get install build-essential [required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev [optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Bash

/opt$ sudo unzip opencv-3.3.1.zip
/opt$cd opencv-3.3.1
/opt/opencv-3.3.1$sudo mkdir build /opt/opencv-3.3.1$cd build /opt/opencv-3.3.1/build$sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. /opt/opencv-3.3.1/build$sudo make -j8(wait long time/opt/opencv-3.3.1/build$sudo make install

注意事項

1. 注意你要安裝的opencv的版本以及cv十二、cv14等;

2.首先須要安裝opencv的依賴庫,並且必須是在安裝opencv以前優先安裝依賴庫,可參考here

3.測試程序完成以後,須要CMakeLists.txt進行編譯,可參考here

CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(test_opencv) SET(OpenCV_DIR /lib/opencv2413/opencv-2.4.13.4/build) INCLUDE_DIRECTORIES(/lib/opencv2413/opencv-2.4.13.4/build/include) FIND_PACKAGE(OpenCV REQUIRED) ADD_EXECUTABLE(test_opencv test_opencv.cpp) TARGET_LINK_LIBRARIES(test_opencv ${OpenCV_LIBS})

FIND_PACKAGE能夠設置爲多個opencv版本之間的切換;

FIND_PACKAGE(OpenCV 3.3.1 REQUIRED)

example

find_package( OpenCV 3.1.0 REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) message("OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}") message("OpenCV_LIBS: ${OpenCV_LIBS}") target_link_libraries( demo ${OpenCV_LIBS} )

4.其餘可能是調試代碼;

如何卸載

cd build sudo make uninstall cd .. sudo rm -r build sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* cd .. rm -r opencv3.3.1

添加opencv_contrib

to build with modules from opencv_contrib set OPENCV_EXTRA_MODULES_PATH to <path to opencv_contrib/modules/>

command

/opt/opencv-3.3.1/build$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ..

error

CMake Error at cmake/OpenCVModule.cmake:296 (add_subdirectory): The binary directory /opt/opencv-3.3.1/build/modules/cudaarithm/.cudaarithm is already used to build a source directory. It cannot be used to build source directory /opt/opencv-3.3.1/opencv_contrib/modules/cudaarithm Specify a unique binary directory name. Call Stack (most recent call first): modules/CMakeLists.txt:7 (ocv_glob_modules)

都是相似以上的錯誤,過程參考herehere,尚未解決。

最後發現是系統有些文件不合適,刪除以後再編譯就ok啦。。。。發現這個不能解決根本問題。

編譯經過可是編譯測試程序的時候仍是有問題,沒有找到對應的文件,我的以爲應該注意opencv_contrib的版本here問題,正在測試。

最後仍是二者的版本問題,兩個版本必定要一致。

還有就是cmake那個步驟,此次使用的是絕對路徑,不知道使用相對路徑是否會出問題,試過的童鞋能夠回答一下這個問題。

後來使用相同的版本安裝編譯以後,使用opencv_contrib中的samples中的例程進行測試,能夠正常運行,即說明安裝成功。

若是還有問題,多是自己程序有什麼BUG引發的,能夠進行調試。

test code

/*---------------------------------------------- * Usage: * ./test 0 *--------------------------------------------------*/ #include <opencv2/core/utility.hpp> #include <opencv2/tracking.hpp> #include <opencv2/videoio.hpp> #include <opencv2/highgui.hpp> #include <iostream> #include <cstring> #include "samples_utility.hpp"

using namespace std; using namespace cv; int main( int argc, char** argv ){ // show help
  if(argc<2){ cout<<
      " Usage: example_tracking_kcf <video_name>\n"
      " examples:\n"
      " example_tracking_kcf Bolt/img/%04.jpg\n"
      " example_tracking_kcf faceocc2.webm\n"
      << endl; return 0; } // create the tracker
  Ptr<Tracker> tracker = TrackerKCF::create(); // set input video
  std::string video = argv[1]; VideoCapture cap(0); Mat frame; // get bounding box
  cap >> frame; Rect2d roi= selectROI("tracker", frame, true, false); //quit if ROI was not selected
  if(roi.width==0 || roi.height==0) return 0; // initialize the tracker
  tracker->init(frame,roi); // do the tracking
  printf("Start the tracking process, press ESC to quit.\n"); for ( ;; ){ // get frame from the video
    cap >> frame; // stop the program if no more images
    if(frame.rows==0 || frame.cols==0) break; // update the tracking result
    bool isfound = tracker->update(frame,roi); if(!isfound) { cout << "The target has been lost...\n"; waitKey(0); return 0; } // draw the tracked object
    rectangle( frame, roi, Scalar( 255, 0, 0 ), 2, 1 ); // show image with the tracked object
    imshow("tracker",frame); //quit on ESC button
    if(waitKey(1)==27)break; } }
View Code

總結

1.準備安裝的opencvopencv_contrib的版本必定要一致,切記!!!

2.按照官網的步驟一步步執行相應的操做,必定要注意cmake那個步驟。

3.安裝完成以後可使用源碼中的一些samples代碼進行測試。

4.測試的程序必定要沒有bug哈~

參考

1.opencv官網

2.CMakeLists編寫

3.CMakeLists-practice文檔

4.opencv多個版本的cmake切換

5.CSDN博客介紹

相關文章
相關標籤/搜索