在Manjaro下用Clion配置OpenCV时发现编译失败
存在问题
opencv2/xxx.hpp:没有那个文件或目录
当前配置的CMakeList.txt文件为
cmake_minimum_required(VERSION 3.14) project("图像处理") find_package(OpenCV REQUIRED) set(CMAKE_CXX_STANDARD 17) add_executable(main main.cpp)
观测后发现文件中引入的是opencv4/opencv2/xxx.hpp
推测是因为在ArchLinux下默认滚动安装的opencv是有opencv4这个目录的
事实也是如此,OpenCV被安装在了/usr/include/opencv4
下
所以在CMakeList.txt下再次手动加入引用目录
修正后配置文件是
cmake_minimum_required(VERSION 3.14) project("图像处理") find_package(OpenCV REQUIRED) include_directories("/usr/include/opencv4") set(CMAKE_CXX_STANDARD 17) add_executable(main main.cpp) target_link_libraries(main ${OpenCV_LIBS})
编译后发现链接库失败。
发现安装OpenCV时缺失依赖hdf5和vtk两个依赖。安装上以后,运行正常。
附测试代码:
#include <iostream> #include <opencv2/core.hpp> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> int main() { cv::Mat img = cv::imread("../pics/img.jpg"); cv::namedWindow("Origin", cv::WINDOW_NORMAL); cv::resizeWindow("Origin", 640, 640); cv::imshow("Origin", img); //拉普拉斯算子 cv::Mat imageEnhance1; cv::Mat kernel = (cv::Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); cv::filter2D(img, imageEnhance1, CV_8UC3, kernel); cv::namedWindow("Enhanced", cv::WINDOW_NORMAL); cv::imshow("Enhanced", imageEnhance1); cv::resizeWindow("Enhanced", 640, 640); //基于对数Log变换 cv::Mat imageLog(img.size(),CV_32FC3); for (int i = 0; i < img.rows; i++) { for (int j = 0; j < img.cols; j++) { imageLog.at<cv::Vec3f>(i, j)[0] = log(1 + img.at<cv::Vec3b>(i, j)[0]); imageLog.at<cv::Vec3f>(i, j)[1] = log(1 + img.at<cv::Vec3b>(i, j)[1]); imageLog.at<cv::Vec3f>(i, j)[2] = log(1 + img.at<cv::Vec3b>(i, j)[2]); } } //归一化到0~255 normalize(imageLog, imageLog, 0, 255, cv::NORM_MINMAX); //转换成8bit图像显示 convertScaleAbs(imageLog, imageLog); cv::namedWindow("Enhanced2", cv::WINDOW_NORMAL); cv::imshow("Enhanced2", imageLog); cv::resizeWindow("Enhanced2", 640, 640); cv::waitKey(0); return 0; }
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
凤曦的小窝
本文地址: ArchLinux下OpenCV配置
本文地址: ArchLinux下OpenCV配置