Linux

無法在 Linux 中通過 Cmake 連結 opencv 庫

  • March 30, 2018

我曾經從 Arch Linux pckage 管理器(pacman)獲得 OpenCV3,它執行良好,但是當我刪除它並從原始碼安裝 OpenCV 3.4.1 和 OpenCV-Contrib 時,當我嘗試重新編譯它們時,即使是舊項目也沒有任何效果,在這裡是 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0012 NEW)
project(Face_Detection)
find_package(OpenCV 3.4.0 REQUIRED)
message("OpenCV Version ${OpenCV_Version}")
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LINK_DIRS})
set(SRC main.cpp)
add_executable(${PROJECT_NAME} ${SRC})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

這是 main.cpp 文件(為了展示,所有項目在重新編譯後不再工作)

#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/face.hpp"
#include "opencv2/imgproc.hpp"

#include <stdio.h> 
#include <fstream>
#include <sstream>

using namespace cv;
using namespace cv::face;
using namespace std;



//Normalize image

static Mat norm_0_255(Mat _src){
    Mat src (_src);
    //The returned normalized image
   Mat dst;
   switch (src.channels()){
        case 1:
            normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC1);
            break;
        case 3:
            normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC3);
            break;
        default:
            src.copyTo(dst);
            break;
    }
    return dst;
}


//Read CSV which containts the paths to images
static void read_csv(const string& filename, vector<Mat>& images,         vector<int>& labels, char separator = ';'){
    ifstream file(filename.c_str(), ifstream::in);
    if(!file){
        string error_message = "No valid inout file was given\n";
        CV_Error(Error::StsBadArg, error_message);
    }
    string line, path, classlabel;
    while(getline(file, line)){
        stringstream liness(line);
        getline(liness, path, separator);
        getline(liness, classlabel);
        if(!path.empty() && !path.empty()){
            images.push_back(imread(path, 0));
            labels.push_back(atoi(classlabel.c_str()));
        } 
    }
 }

int main(int argc,const char* argv[]){
    return 0;
}

重新編譯項目後的錯誤

cmake ..
make

重新編譯項目後的 OpenCV 錯誤

其餘誤差相同。注意:此程式碼來自範例,當然這是其中的一部分,其他項目也無法正常工作,儘管在我重新安裝之前它們已經工作。

我已經通過重新編譯 OpenCV 和重新編譯 LPACKE 來編譯 OpenCV 解決了這個問題 我使用了他們的文件和這篇博文

*注意塊文章我沒有使用最後兩個命令

sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'

sudo ldconfig

我用這個部落格作為指導,我不需要裡面的所有東西*另外我建議你應該先了解從原始碼編譯(cmake和make)以及Linux系統的結構(你可以在網上找到很多) ,因為問題是 OpenCV 找不到依賴項,正如有人在 G+ 文章上對我說的那樣。

引用自:https://unix.stackexchange.com/questions/433629