예전에는 Arch Linux pckage Manager(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
나머지 오류는 동일합니다. 참고: 이 코드는 샘플에서 가져온 것입니다. 물론 샘플의 일부입니다. 다른 프로젝트도 작동하지 않습니다. 단, 다시 설치하기 전에는 작동했습니다.
답변1
OpenCV를 다시 컴파일하고 LPACKE를 다시 컴파일하여 OpenCV를 컴파일하여 문제를 해결했습니다.문서이블로그 게시물
*블록 포스트 참고 마지막 두 명령을 사용하지 않았습니다.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
나는 이 블로그를 가이드로 사용합니다. 여기에 모든 내용이 필요하지는 않습니다* 또한 먼저 소스에서 컴파일하는 방법(cmake 및 make)과 Linux 시스템의 구조(온라인에서 많이 찾을 수 있음)를 배워야 한다고 제안합니다. 문제는 누군가 G+ 게시물에서 나에게 말했듯이 OpenCV가 종속성을 찾을 수 없다는 것입니다.