1. 程式人生 > >Ubuntu14.04下Opencv2.4.13使用遇到的問題

Ubuntu14.04下Opencv2.4.13使用遇到的問題

裝了雙系統,所以想把工作儘量在Ubuntu下面完成。以前在Windows下面使用opencv,現在想在Ubuntu下用。

編寫一個例子test.cpp:簡單的顯示圖片

 #include <stdio.h>  
    #include <opencv2/opencv.hpp>  
      
    using namespace cv;  
      
    int main( int argc, char** argv )  
    {  
    Mat image;  
    image = imread("lena.jpeg");  
      
    namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );  
    imshow( "Display Image", image );  
      
    waitKey(0);  
      
    return 0;  
    }  

編寫CMakeLists.txt檔案

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

然後在終端輸入
cmake .
make
./test.cpp
如果一切順利當然會顯示圖片,但事情總不會一帆風順。。。

一.輸入cmake .後出錯

到這一步出現了錯誤如下所示:

CMake Error at CMakeLists.txt:6 (find_package):
  Found package configuration file:

    /home/user/opencv-2.4.13/cmake/OpenCVConfig.cmake

  but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be
  NOT FOUND.

網上找了很多方法都沒有解決,後來谷歌到了:

1.在你下載且已經編譯完成的opencv原始碼的資料夾下,進入cmake資料夾,找到OpenCVConfig.cmake檔案(根據錯誤提示的路徑去找OpenCVConfig.cmake檔案)


2.開啟OpenCVConfig.cmake後,在檔案最後新增

set(OpenCV_FOUND 1)

這樣就解決了。

在這一步還有可能出現一個問題

CMake Error: Unable to open check cache file for write. /home/user/test/CMakeFiles/cmake.check_cache
這裡需要root許可權去執行cmake .命令。第二步輸入如下命令:
sudo cmake .
根據提示輸入密碼就成功了

二.輸入make後出錯

但老天總不會這麼輕易放過我,輸入第二條指令後又出錯了。

test.o:在函式‘main’中:
test.cpp:(.text.startup+0xc):對‘cvLoadImage’未定義的引用
test.cpp:(.text.startup+0x23):對‘cvNamedWindow’未定義的引用
test.cpp:(.text.startup+0x30):對‘cvShowImage’未定義的引用
test.cpp:(.text.startup+0x37):對‘cvWaitKey’未定義的引用
test.cpp:(.text.startup+0x41):對‘cvDestroyWindow’未定義的引用
collect2: error: ld returned 1 exit status

解決方法:在CMakeLists.txt修改這一句find_package(OpenCV [版本號] REQUIRED)

cmake_minimum_required(VERSION 2.8) 
project( hello )  
find_package( OpenCV 2.4.13 REQUIRED )  #修改這一句啊  
add_executable( hello hello.cpp )  
target_link_libraries( hello ${OpenCV_LIBS} ) 

到此就全部解決了

三.在IDE執行出錯

我把這個程式碼又放到Kdevelop裡面跑了一遍,但是出現瞭如下錯誤:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/user/opencv-2.4.13/modules/highgui/src/window.cpp, line 261
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/user/opencv-2.4.13/modules/highgui/src/window.cpp:261: error: (-215) size.width>0 && size.height>0 in function imshow
解決方法:在程式碼中,新增放置圖片的完整路徑
#include <stdio.h>  
    #include <opencv2/opencv.hpp>  
      
    using namespace cv;  
      
    int main( int argc, char** argv )  
    {  
    Mat image;  
    image = imread("/home/user/code/test/lena.jpeg"); //這個地方根據你自己放置圖片的路徑來寫 
      
    namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );  
    imshow( "Display Image", image );  
      
    waitKey(0);  
      
    return 0;  
    }