(原+轉)ubuntu16中安裝opencv2.4.11(2.4.13)


轉載請注明出處:

http://www.cnblogs.com/darkknightzh/p/5638117.html

參考網址:

http://www.cnblogs.com/jeakon/archive/2013/05/08/3066469.html

http://my.oschina.net/u/1757926/blog/293976

 

1 預先安裝一些軟件:

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev  

2 去管網下載opencv壓縮包

3 解壓壓縮包到某文件夾(用windows習慣了,直接右鍵提取到此處。。。)

4 command中cd到該解壓縮的文件夾中,然后創建build文件夾 mkdir build

5 進入build目錄 cd build

6 編譯opencv源碼

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

====================================================

161107更新:

1). 更新了cuda8.0之后,opencv重新安裝時,提示:

 Unsupported gpu architecture 'compute_11'

http://stackoverflow.com/questions/28010399/build-opencv-with-cuda-support指出,上面的命令換成

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..

便可以解決該問題。

http://www.th7.cn/system/lin/201702/203301.shtml

中指出,可以設置為自動識別:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Auto ..

2). 上面可以過去,之后還是會有錯誤:

graphcuts.cpp error 'NppGraphCutState' has not been declared

按照https://kangkang113.wordpress.com/2016/09/02/deep-learning-framework-using-gtx1080ubuntu16-04/中的說明,需要修改源代碼,進入graphcuts.cpp(位置opencv-2.4.11/modules/gpu/src/graphcuts.cpp),然把45行改成

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)

之后便可以編譯成功。

3). 編譯中會有很多warning,如:

/home/opencv-2.4.11/modules/core/include/opencv2/core/cuda_devptrs.hpp:147:17: warning: ‘template<class T> struct cv::gpu::DevMem2D_’ is deprecated [-Wdeprecated-declarations]
         typedef DevMem2D_<unsigned char> DevMem2Db;
                 ^
/home/opencv-2.4.11/modules/core/include/opencv2/core/cuda_devptrs.hpp:138:61: note: declared here
         template <typename T> struct __CV_GPU_DEPR_BEFORE__ DevMem2D_ : public 

暫時沒管這些wanring。

161107更新結束

170121更新:

今天裝了opencv2.4.13,上面2).中的地方已經修改了,因而不需要再修改了。

170121更新結束

====================================================

170620更新:

在安裝了anaconda,而且默認g++變成了anaconda中的g++之后,會提示:

 /usr/bin/ld: /home/XXX/anaconda2/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/crtbeginS.o:unrecognized relocation(0x2a) in section `.text'
    /usr/bin/ld: final link failed: Bad value 
    collect2: error: ld returned 1 exit status

上面的錯誤見:http://www.cnblogs.com/darkknightzh/p/6950263.html

主要是anaconda的問題吧。。。此處使用cmake,因而需要將c++編譯器改成系統自帶的,使用CMAKE_C_COMPILERCMAKE_CXX_COMPILER這兩個來設定cmake使用的c及c++編譯器(http://blog.csdn.net/10km/article/details/50444715),具體代碼如下(結合了161107中的更新):

cmake -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-4.9 -D CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9 -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Auto ..

使用上述命令后,編譯opencv成功了。折騰人啊。。。

170620更新結束

====================================================

7 安裝

sudo make install

 

測試:

1. 寫helloworld.cpp

#include <opencv2/opencv.hpp>
using namespace cv;

#include <stdio.h>

int main( int argc, char** argv )
{
    if( argc != 2 )//判斷參數是否是兩個
    {
        printf( " No image data \n " );
        return -1;
    }

    char* imageName = argv[1];
    Mat image = imread( imageName, 1 );//讀入圖片;
    if(  !image.data)//判斷是否有數據
    {
        printf( " No image data \n " );
        return -1;
    }

    namedWindow( imageName, CV_WINDOW_AUTOSIZE );
    imshow( imageName, image );//顯示圖片

    waitKey(0);
    return 0;
}

2. 寫cmake的makefile,即CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(helloworld)
add_executable(helloworld helloworld.cpp)
find_package(OpenCV REQUIRED)
target_link_libraries(helloworld ${OpenCV_LIBS})

=======================================================================================

170121更新:

剛才編譯opencv2.4.13,之后編譯該程序時,提示:

cannot find -lopencv_dep_cudart

https://github.com/opencv/opencv/issues/6542中指出,在cmake時,加上-D CUDA_USE_STATIC_CUDA_RUNTIME=OFF(開始我以為是編譯opencv時候加上這句,結果編譯這個測試程序還是有問題。后來才意識到,是編譯這個測試程序時加上這句才對。)

另一種解決方法就是,如http://stackoverflow.com/questions/41608111/cannot-find-lib-libopencv-dep-cudart中指出的,在上面的CMakeLists.txt中find_package(OpenCV REQUIRED)之前加上:

set(CUDA_USE_STATIC_CUDA_RUNTIME OFF)

之后按照后續的繼續編譯,也可以成功。

http://code.opencv.org/issues/2166中指出,由於gpumat (.hpp, .cpp)在revision #6957已經被移到opencv_core中,因而編譯OpenCV with CUDA enabled時,即便工程不使用cuda,每個工程仍舊需要npp (npp32_42_9.dll, 50MB) 和 cudart (cudart32_42_9.dll) dll(這個應該是windows上面的,linux應該就是so了),

 

170121更新結束

=======================================================================================

3. 進入該文件夾,創建build,mkdir build

4. 之后:

cmake ..
make

得到可執行文件 helloworld

5. 拷貝一張圖像到該可執行文件文件夾中,輸入

./helloworld 11.jpg

顯示圖像,說明安裝成功

ps

1. 之前未使用步驟1,結果編譯沒錯,運行后,提示

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/XXX/file/program/opencv2411/modules/highgui/src/window.cpp, line 483 terminate called after throwing an instance of 'cv::Exception'

執行步驟1並重新編譯了opencv之后,運行便顯示圖像了(感覺不需要所有的庫都裝上去,但是還是都裝了)。

2. 如果提示沒有安裝cmake的話,安裝一下cmake

3. 第6步中,/usr/local ..這樣用就行了。開始一直以為這個是自己設置的目錄,結果怎么編譯都提示沒有文件夾(對linux真心不熟)。。。

4. 如果使用NetBeans IDE的話,

不執行步驟1編譯沒錯,運行時會有如下錯誤:

編譯完之后,需要設置連接器中的庫:

庫目錄如下:

 

添加opencv的庫:

本來左側是沒有那一串的,點擊“添加PkgConfig庫”

出現如下界面,點擊“opencv”

最終庫里面如下(下圖中應該還有庫目錄的設置,首先截的是這個圖,所以沒有):

編譯后可成功運行。

並未像參考網址中那樣,設置libiary等,但是可能那樣以后會方便吧。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM