这几天在ubutnu系统下搭建opencv环境。本来像用vscode当编辑器,结果.joson文件配置了半天,总是显示链接不到opencv的库,我也没那么多时间耗在搭建环境上,所以干脆放弃vscode,直接使用cmake来编译.cpp文件。主要参考了这两篇博文:博文1、博文2。过程记录如下:
第一步 创建CMakeLists.txt文件
首先,创建你的工程文件夹,里面包含你的程序源文件,然后在同一目录下创建一个.txt文件命名为CMakeLists.txt(cmake编译时需要用到),该文件可以从你安装opencv的位置opencv-4.4.0/samples/cpp/example_cmake
中复制过来,在其基础上再修改即可。下面详细讲一下如何根据自己的需求修改这个文件:
# 这是对CMake工具最低版本要求,我们可以使用命令“cmake --version”查看CMake版本
cmake_minimum_required(VERSION 3.1)
# 设置工程文件名
#这是建立一个工程项目(类似于我们VS中建立C++项目一样),括号里面时工程名,工程名我们可以任意给,最后程序编译出来的可执行文件就是这个名字
project(【您的工程文件名】) # 把这块的工程文件名修改成你自己的
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED) # 这是cmake用来查找opencv包用的,不用改
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " config: ${OpenCV_DIR}")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
# Declare the executable target built from your sources
# 这里括号里面的两个参数分别是工程项目名和我们要编译文件名的意思,记住中间一空格键隔开
add_executable(【您的工程文件名】 【您的源文件名】) # 改工程文件名 源文件名
# Link your application with OpenCV libraries 链接到OpenCV库的环节
target_link_libraries(【您的工程文件名】 PRIVATE ${OpenCV_LIBS}) # 改工程文件名
按照上述代码中所述,修改部分内容的名称即可。
创建结束后,效果如下所示
我的源文件中的代码为:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage=imread("lena.jpg");
imshow("Origin",srcImage);
waitKey(0);
return 0;
}
第二步 通过cmake .和make命令生成makefile文件和可执行文件
接下来我们要使用cmake .
命令配合CMakeLists.txt生成makefile文件,使用make
进行编译生成可执行文件
在您工程文件夹下打开终端,输入下述命令即可:
cmake .
make
命令效果如下所示,则表明编译成功
此时,工程文件夹下应该有如下文件:
第三步 执行!
在工程文件夹路径下输入 ./opencv_C++_learning
(我的工程文件名起得是opencv_C++_learning
,此处改成你的即可)。
执行效果如下: