最近进阶学习计算机图形学,然后得用opencv c++
的开发环境,emmm,强前端所难!多少年没碰c++
了,搞得我一头雾水!幸好总算让我踩坑踩着踩着,就搭成功了!
1.mingw安装
MinGW(Minimalist GNU for Windows)是一个开源的开发环境,旨在为Windows平台提供基于GNU工具链的C和C++程序开发支持。
- 在gitHub下载安装包,
https://github.com/niXman/mingw-builds-binaries/releases
-
根据自己需要选择对应版本,建议选择
posix-seh
的版本。我的电脑是win10 64位
,选择了x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev1.7z
-
我用的是压缩包,下载完直接解压到文件夹目录,然后将
mingw64/bin
路径配置到环境变量Path
- 在cmd命令行窗口输入
gcc -v
,可以看到输出gcc
版本信息, 代表安装成功了!
2.在vscode运行c++
-
给vscode添加插件
-
在vscode的
settings.json
配置一下include
库
{
"C_Cpp.default.systemIncludePath": [
"D:/software/mingw64/x86_64-w64-mingw32/include/",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/x86_64-w64-mingw32",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/backward",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include-fixed"
],
"C_Cpp.default.includePath": [
"D:/software/mingw64/x86_64-w64-mingw32/include/",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/x86_64-w64-mingw32",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/backward",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include",
"D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include-fixed"
],
"C_Cpp.default.compilerPath": "D:/software/mingw64/bin/gcc.exe",
}
- 创建项目,添加件
main.cpp
#include <iostream>
int main()
{
std::cout << "Hello, world! HAHAHA" << std::endl;
return 0;
}
- 在当前目录cmd命令行输入以下编译命令,会编译生成一个
main.exe
。
gcc main.cpp -lstdc++ -o main.exe
-
命令行说明:
-l<library>
链接某个库,-o <file>
输出文件 -
更多具体gcc命令行使用说明可以看这里菜鸟教程 GCC 参数详解
-
在命令行中执行
main.exe
,会打印结果。
然后我发现一个很头大的事情,如果纯用gcc,要到github下载c++库,,而且还得每次命令行都要输入一堆-L<dir> -l<library>
链接库!啊啊啊,好烦!于是我试图找一下有没有更方便的方法,于是发现了可以用conan来管理c++库,cmake来配置链接库关系,简化构建过程。okk!
3.cmake安装
CMake(Cross-Platform Make)是一个跨平台的自动化构建系统,主要用于管理和构建软件项目。它通过配置文件(通常是CMakeLists.txt
)来描述项目的构建过程,支持多种编程语言(如C、C++、Fortran等),并可以生成多种构建系统(如Makefile、Visual Studio项目文件、Xcode项目文件等)。
- 直接官网下载
https://cmake.org/download/
,我的电脑是win10 64位
,选了cmake-4.0.0-rc1-windows-x86_64.zip
- 我用到是压缩包,下载完直接解压到文件夹目录,然后将
cmake/bin
路径配置到环境变量Path
- 在cmd命令行窗口输入
cmake -version
,可以看到输出cmake
版本信息, 代表安装成功了!
4.conan安装
官网:https://conan.io/
Conan 是一个开源的 C/C++ 包管理器,旨在简化依赖管理和跨平台构建过程。功能:
- 依赖管理:Conan 可以从公共或私有存储库中自动下载和安装项目所需的依赖项。它支持多种操作系统和编译器,并且可以处理不同版本的依赖。
- 跨平台支持:Conan 支持 Windows、Linux、macOS 等多种操作系统,能够生成不同平台的二进制文件。
- 版本控制:开发者可以明确指定依赖库的版本,确保项目的稳定性和可复用性。
- 包管理和分享:Conan 允许开发者将自己的库打包并分享到中央仓库或其他仓库,其他开发者可以轻松地安装和使用这些库。
- 本地缓存:Conan 会缓存下载的依赖库,提高后续安装速度,并支持自定义缓存策略。
官网提供了好几种安装方法,我电脑有安装Python,于是采用pip安装conan。 更多安装方法请看官方文档
pip install conan
- 在cmd命令行窗口输入
conan -v
,可以看到输出gcc
版本信息, 代表安装成功了!
- 因为我们要用gcc编译代码,所以配置一下conan的c++运行环境,在cmd命令窗口输入下面命令。
# 检测当前运行环境信息
conan profile detect --force
# 创建一个gcc的运行环境信息
conan profile detect --name "gcc"
- 打开电脑user目录的
.conan2\profiles\gcc
文件修改一下运行信息,设置编译器为gcc,对应版本号,c++库等
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=14
os=Windows
注意.conan2
文件夹p
文件夹存储conan相关信息,其中p
文件夹存储下载的库,profiles
文件夹存储运行环境配置。settings.yml
存储conan可用的一些设置项。
5.安装opencv库
-
许多教程让直接下载官网的installer,或者下载官方github源码用cmake编译成build,而installer的方式会缺少编译后的库,容易编译的时候出现找不到opencv库。源码编译的方式还要cmake一下,编译也很花时间,并且报错也不知怎么处理。
-
我建议到github下载OpenCV-MinGW-Build,这个是别人已经编译好的opencv版本。
-
下载压缩包后解压到文件目录,然后将
opencv/x64/mingw/bin
和opencv/x64/mingw/lib
两个目录配置环境变量Path
- 为了避免vscode的c++文件使用opencv库的时候报错,需要添加
opencv/include
的路径到setting.json
的include
库路径中
6.运行opencv项目
- (1) 在项目中,创建
conanfile.txt
文件,配置需要下载的c++库。
[requires]
# 库/版本
zlib/1.3.1
[generators]
# 生成cmake依赖关系
CMakeDeps
# 生成cmake工具链
CMakeToolchain
因为这个项目已经安装了opencv不再用conan下载,上面只是简单的使用示范,需要其他库也可换行添加,可以在conan中心https://conan.io/center
搜索查询库的信息。
- (2) 创建
CMakeLists.txt
文件,配置构建,更多的cmake使用方法请看cmake菜鸟教程
cmake_minimum_required(VERSION 3.15)
# 项目名称
project( EdgeImage )
# 查找opencv库
find_package(OpenCV REQUIRED)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 设置编译结果输出路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
# 引入opencv的include库
include_directories(${OpenCV_INCLUDE_DIRS})
# 执行cpp文件
add_executable( ${PROJECT_NAME} main.cpp )
# 链接opencv库
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
- (3) 创建
main.cpp
文件,调用opencv
库,这里是个简单的opencv边缘检测的示例.
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
void imageEdge(Mat image)
{
// 转换为灰度图像
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
// Canny 边缘检测
Mat edges;
Canny(grayImage, edges, 100, 200); // 阈值1和阈值2
imshow("ImageEdge", edges);
imshow("Image", image);
}
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("请输入图片文件路径 <Image_Path>\n");
return -1;
}
Mat image;
// 读取图片数据
image = imread(argv[1], IMREAD_COLOR);
if (!image.data)
{
printf("没有图片数据 \n");
return -1;
}
imageEdge(image);
waitKey(0);
return 0;
}
- (4) 然后我们可以执行命令让conan编译出cmake配置。
# conan安装没有的c++库,设置用gcc来编译
conan install . --output-folder=build --build=missing --profile:host=gcc --profile:build=gcc
可以看到build文件夹下cmake的相关配置文件,其中conan_toolchain.cmake
文件里可以找到conan下载库的全路径。
- (5) 接下切换到build目录,为cmake构建前进行配置
# 设置MinGW Makefiles为编译器,编译模式为release,使用conan_toolchain.cmake工具链
cmake .. -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE="Release"
- (6) 继续输入,编译命令,正式开始生成结果
cmake --build . --config Release
- (7) 可以在bin文件下看到
EdgeImage.exe
,可以执行程序,对图片进行边缘检测。
EdgeImage ../logo.jpg
参考