使用VScode+CMakeLists编译OpenCV
因为要学习OpenCV,但是Visual Studio太过庞大,写个Hello World的程序有种杀鸡用牛刀的感觉,因此决定使用VScode与CMakeLists的组合编译学习OpenCV。
前提准备:
OpenCV源代码 mingw32编译器 Cmake程序
1. Mingw32编译器的安装详见
MinGW下载
我安装的版本是: 我忘记了自己当时的安装方法,自行安装。
2. Cmake程序:
Cmake下载 下载并安装,然后启动cmake-gui程序。
PS:下载这个后缀为.msi的程序,然后直接安装并添加到PATH中(里面有这个选项)。
(我当时这个GUI界面显示在运行,但是不能显示界面。卸载重装多次后也无效,最后才发现是窗口出了问题,即:
3. OpenCV源代码
OpenCV
版本自行选择。
编译过程
在Cmake界面中“Where is the source code”选择下载后的OpenCV文件夹。同时在OpenCV文件夹下新建build子文件夹,并将Cmake张的“Where to build the binaries”指向改文件夹。
点击Configure后选择“MinGW Makefiles”->Use default native compilers (建立在正确安装MinGW的基础之上)。
漫长的等待过程后,选择相应的组件然后在Configure。如果没有之间Generate,等待完成。
Configure Done Generate Done
编译mingw32
在上述的build文件夹下,进入cmd命令行(在地址栏输入cmd);如果电脑中安装有git bash,也可以右键git bash here。
使用命令mingw32-make 进行编译(不建议使用mingw32-make -j4等多线程,因为错误不明确,可能还得再来一遍)。如果出现错误,可以上网查找相关问题,比如某些包用不到,但是却编译错误,可以重复上文中cmake过程,取消选择相应的包,然后重新configure和generate,再mingw32-make。
(我已经安装完成,这里就没有截图表示了)
如果成功且未报错,则可以使用,mingw32-make install ,这样在install文件夹中就可以看到头文件和库文件了。
(框选出来的cmake文件就是我们要在Cmake中指定的文件)
- 最后设置环境变量,为系统环境变量Path添加这个目录下的x64/mingw/bin文件,即:
2. 添加OpenCV_DIR变量,即上文的两个Cmake的所在位置(也有文章是使用上文的build文件夹,请自行测试)。
VScode调用
简单的使用一个OpenCV显示图像的程序,使用VScode中的Cmake插件进行编译,其中程序及CMakelists为:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, const char** argv)
{
Mat color = imread("D:/2.jpg");
if(! color.data)
{
cout<<"Could not open or find the image"<<endl;
return -1;
}
imshow("Color Image",color);
waitKey();
return 0;
}
CMakeLists.txt
其中set(OpenCV_DIR D:/opencv/opencv-3.4.6/build/install/) 就是指向那 “编译mingw32”那两个cmake文件:OpenCVConfig.cmake与OpenCVConfig-version.cmake
cmake_minimum_required(VERSION 3.0)
project(detect)
set(CMAKE_CXX_STANDARD 11)
set(OpenCV_DIR D:/opencv/opencv-3.4.6/build/install/)
find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME} "main.cpp")
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++",
"type": "cppdbg",
"request": "launch",
"program": "D:/C++Program/VsCodeForOpenCV/build/detect.exe", // 请指向自己cmake后生成的文件,这里我为了方便唯有改变
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-po
six-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe", // 这里需要改成自己的mingw地址
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
//"preLaunchTask": "Build"
}
]
}
运行成功:
使用CMakeLists+VScode的组合折腾了好久,在Win下多数教程是使用VS进行编译,找的很辛苦。整理一下,防止遗忘。才疏学浅如有错误请指出,共同进步~~