前言
嘛,这个东西在上次写msys2就想加的,无奈被CMake坑出💩,这几天因为折腾ffmpeg玩又要用所以研究了下,搞明白了还挺好用的。
IDE依旧用的是Clion,配置啥看msys2配置记录,这里不再说了。
安装OpenCV
在msys2下安装还是很简单的
# 如果没有安装toolchain的话先装下
pacman -S mingw-w64-x86_64-toolchain
# 安装OpenCV
pacman -S mingw-w64-x86_64-opencv
完事,就是这么简单粗暴
使用
- Clion新建个项目
- 编写main.cpp
// main.cpp
/**
读取一个图片,并显示
*/
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
Mat mat = imread("C:\\Users\\Chigusa\\Desktop\\1.jpg");
imshow("test",mat);
waitKey();
return 0;
}
- 编写CMakeLists.txt
# cmake版本最低要求
cmake_minimum_required(VERSION 3.8)
# 工程名,会产生"${PROJECT_NAME}"变量
project(OpenCV_Test)
# set用来定义变量,变量使用时用"${变量名}"的形式
set(CMAKE_CXX_STANDARD 11)
# 用find_package寻找OpenCV,找到后会有"${OpenCV_INCLUDE_DIRS}","${OpenCV_LIBRARIES}"两个变量可供使用,第一个是头文件位置,第二个是库文件
find_package(OpenCV REQUIRED)
# message用来打印信息,这里打印下找到的OpenCV的头文件和库文件的信息,可以不做
message(STATUS "OpenCV Include: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV Libs: ${OpenCV_LIBRARIES}")
# 找到在当前目录下的所有代码文件,存储到"SOURCE_FILES"变量中
aux_source_directory(. SOURCE_FILES)
# 打印下刚才的"SOURCE_FILES",同样可不做
message(STATUS "src: ${SOURCE_FILES}")
# 定义需要include的头文件的位置
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加个可执行的输出,第一个参数是输出名,必须唯一,第二个源文件
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# 用来链接库,注意这个函数要在"add_executable"之后使用
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
-
点击上面的Reload changes,然后就能看到信息了
- 编译运行
尾巴
如果想用其他的CMake构建出来的库,比如Boost
也可以直接find_package(Boost REQUIRED)
,然后加个include_directories(${Boost_INCLUDE_DIRS})
和target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
就行,如果不是的话参考这个文章吧。
最近换了Mac,msys2近期估计不会再折腾了(狗屎虚拟机跑Win10快卡死我了orz)