[opencv][cpp] cpp-opencv 配置(ubuntu-linux)
1. linux 下配置opencv环境
1. 步骤1. opencv 官网下载 source code
2. 步骤2. 解压 opencv.zip
命令:
source code
unzip opencv-xxx -d 目标路径`
robotDepends文件夹是专门用来存放ros项目的依赖,opencv依赖库是其中的一个,便于管理。
3. 步骤3. 提前安装依赖库
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
4. 步骤4. 编译opencv源码
在源码文件夹中, 新建build目录, 进入build目录运行cmake
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_OPENGL=ON ..
make
5. 步骤5. 在clion中创建一个opencv项目
创建一个cmake文件夹,添加FindOpenCV.cmake文件
# once done, this will define
#OpenCV_FOUND - whether there is OpenCV in the prebuilt libraries
#OpenCV_INCLUDE_DIRS - include directories for OpenCV
#OpenCV_LIBRARY_DIRS - library directories for OpenCV
#OpenCV_LIBRARIES - link this to use OpenCV
unset(OpenCV_FOUND)
# set(<variable> <value>... [PARENT_SCOPE])
# Signatures of this command that specify a <value>... placeholder expect zero or more arguments.
# Multiple arguments will be joined as a semicolon-separated list to form the actual variable value to be set.
# Zero arguments will cause normal variables to be unset.
# 指定项目依赖库所在的路径变量,这里都放在 /robotDepends/libs目录下
# /home/jacob/devtools/robotDepends/libs/opencv_3.4.12/libs
set(PREBUILT_DIR /home/jacob/devtools/robotDepends/libs)
# 指定opencv头文件库文件所在的路径变量,这里放在 /libs/opencv_3.4.12目录下
set(OpenCV_DIR ${PREBUILT_DIR}/opencv_3.4.12)
MESSAGE(STATUS "TEST ${PREBUILT_DIR}")
# 指定opencv头文件所在的路径变量,这里放在 /opencv_3.4.12/include目录下
set(OpenCV_INCLUDE_DIRS ${OpenCV_DIR}/include)
# eg: set(srcs a.c b.c c.c) # sets "srcs" to "a.c;b.c;c.c"
set(OpenCV_LIB_COMPONENTS
opencv_videostab;
opencv_video;
opencv_superres;
opencv_stitching;
opencv_photo;
opencv_objdetect;
opencv_ml;
opencv_imgproc;
opencv_highgui;
opencv_flann;
opencv_features2d;
opencv_core;
opencv_calib3d;
opencv_xfeatures2d;
opencv_imgcodecs)
# This command is used to find a directory containing the named file.
# find_path (
# <VAR>
# name | NAMES name1 [name2 ...]
# [HINTS path1 [path2 ... ENV var]]
# [CMAKE_FIND_ROOT_PATH_BOTH |
# ONLY_CMAKE_FIND_ROOT_PATH |
# NO_CMAKE_FIND_ROOT_PATH]
# )
find_path(OpenCV_INCLUDE_DIRS NAMES opencv.h HINTS ${OpenCV_DIR}/include NO_SYSTEM_ENVIRONMENT_PATH)
set(OpenCV_LIBRARY_DIRS ${OpenCV_DIR}/lib)
FOREACH (cvcomponent ${OpenCV_LIB_COMPONENTS})
find_library(lib_${cvcomponent} NAMES ${cvcomponent} HINTS ${OpenCV_DIR}/lib NO_DEFAULT_PATH)
set(OpenCV_LIBRARIES ${OpenCV_LIBRARIES};${lib_${cvcomponent}})
ENDFOREACH ()
set(OpenCV_LIBS ${OpenCV_LIBRARIES})
set(OpenCV_INCLUDE_DIRS
${OpenCV_INCLUDE_DIRS};
${OpenCV_INCLUDE_DIRS}/opencv)
if (OpenCV_INCLUDE_DIRS AND OpenCV_LIBRARIES)
set(OpenCV_FOUND TRUE)
endif (OpenCV_INCLUDE_DIRS AND OpenCV_LIBRARIES)
if (OpenCV_FOUND)
if (NOT OpenCV_FIND_QUIETLY)
message(STATUS "Found OpenCV: ${OpenCV_LIBRARIES}")
endif (NOT OpenCV_FIND_QUIETLY)
else (OpenCV_FOUND)
if (OpenCV_FIND_REQUIRED)
message(FATAL_ERROR "Could not find the OpenCV library")
endif ()
endif (OpenCV_FOUND)
# 导入opencv相关的头文件
include_directories(${OpenCV_INCLUDE_DIRS})
6. 步骤6. 修改cmakelists.txt
cmake_minimum_required(VERSION 3.17)
project(studyopencv001)
set(CMAKE_CXX_STANDARD 14)
# load files under cmake directory
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}/cmake)
# find dependencies for opencv
find_package(OpenCV REQUIRED)
add_executable(studyopencv001 main.cpp)
target_link_libraries(studyopencv001 ${OpenCV_LIBS})
2. 调试验证
验证代码
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
//using namespace cv;
int main() {
std::cout << "Hello, World!" << std::endl;
cout << "OpenCV version : " << CV_VERSION << endl;
cout << "Major version : " << CV_MAJOR_VERSION << endl;
cout << "Minor version : " << CV_MINOR_VERSION << endl;
cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl;
const cv::Mat &img = cv::imread("/home/jacob/CVWS/studyopencv001/img/lena.png", cv::IMREAD_COLOR);
cv::imshow("lena", img);
cv::waitKey(0);
return 0;
}
验证结果
*. 参考
*. 问题解决
1. 虚拟机下 ubuntu 中 clion 输入法切换失败问题(待解决)
在vmware虚拟机下,配置好的搜狗拼音输入发在clion中做中英文切换时会出现延时,有的时候会卡死clion,必须要杀死进程重启。猜测是ubuntu在虚拟机中运行时才会出现的问题,目前没有找到解决办法。
2. Failed to load module “canberra-gtk-module”
解决:安装缺失模块:
sudo apt-get install libcanberra-gtk-module
参考:Failed to load module “canberra-gtk-module”