操作系統為Debian9,由於使用apt-get安裝在/usr/lib目錄下的opencv可能會造成一些項目上的頭文件錯誤問題,所以選擇了從源碼安裝。
選擇opencv3.4.1, 進入https://opencv.org/releases.html選擇3.4.1的sources下載。解壓后,進入該目錄。參照https://docs.opencv.org/3.4.1/d7/d9f/tutorial_linux_install.html 進行安裝。
步驟:
1.創建build目錄
mkdir build; cd build
2.配置
使用cmake-gui。這里由於是自定義安裝,所以不應該安裝網頁上的命令cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 進行。否則,可能會裝到/usr/local目錄下。
選擇解壓后的opencv目錄路徑,和build目錄路徑。這里 set optional parameters不需要進行操作。
點擊configure,會出現很多配置選項,唯一需要修改的是install directory,具體的參數名不記得了,鼠標放在上面會有提示。把這個目錄修改為你想安裝到的目錄。如果不修改的話,默認是/usr/local。
點擊generate。
3. make 。
4.make install。這樣會把include, lib, bin, share這四個目錄安裝到在第二步中配置的安裝目錄里。
5驗證,生成.mat文件。
程序:
#include<iostream> #include<fstream> #include<opencv2/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace std; void writeMat(const cv::Mat& image, const string name){ ofstream ofs(name, ios::out|ios::app); ofs<<image.cols <<" "<<image.rows<<" "; for(int i=0; i<image.cols*image.rows*3; i++){ ofs<<(int)image.data[i]<<" "; } ofs.close(); } int main(int argc, char** argv){ string imageName("timg.jpeg"); if(argc > 1){ imageName = argv[1]; } cv::Mat image; image = cv::imread(imageName, cv::IMREAD_COLOR); if(image.empty()){ cout<<"Could not open or find the image" << endl; return -1; } string name = "temp.mat"; writeMat(image, name); return 0; }
編譯:g++ main.cpp -I opencv_install_directory/include -L opencv_install_directory/lib -lopencv_highgui -lopencv_core -lopencv_imgcodecs
后面的-lopencv_core -lopencv_imgcodecs需要加上,否則會報錯:
/usr/bin/ld: /tmp/cc9NW3Sj.o: undefined reference to symbol '_ZN2cv6imreadERKNS_6StringEi'
//home/benxu/Documents/Workspace/opencv/install/lib/libopencv_imgcodecs.so.3.4: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status。
這里加上后,還是會報錯:類似於這樣
openCV program compile error “libopencv_highgui.so.3.4: cannot open shared object file: No such file or directory” in ubuntu 12.04
雖然在 opencv_install_directory/lib中已經包含了libopencv_highgui.so.3.4文件,不過它是一個引用鏈接,指向libopencv_highgui.so.3.4.10。
解決辦法參考網址:https://stackoverflow.com/questions/12335848/opencv-program-compile-error-libopencv-core-so-2-4-cannot-open-shared-object-f
這里需要指出的是,在用戶安裝了一個新的動態鏈接庫時,需要手工運行ldconfig命令。
在/etc/ld.so.conf目錄下新建opencv.conf,在里面添加:opencv_install_directory/lib路徑。
運行:ldconfig -v。
然后再運行上面的編譯命令,即可順利執行。