Cmake、VS2019、C++、openGL&openCV环境安装

发布于:2025-07-24 ⋅ 阅读:(33) ⋅ 点赞:(0)

CMakeVisual Studio 2019 环境下安装和配置 OpenGLOpenCV 以及 CUDA 可能会有些复杂,因为涉及的组件多且相互依赖。以下是一个详细的指南,帮助您逐步完成安装和配置。


1. 前提条件

在开始之前,请确保您已安装以下软件:

  • Visual Studio 2019: 安装时请选择“使用 C++ 的桌面开发”工作负载。如果您计划进行更广泛的图形编程,也可以考虑包含“使用 C++ 的游戏开发”工作负载,因为它包含了一些 OpenGL 相关组件。
  • C++ 编译器: Visual Studio 2019 自带 MSVC,我们将使用它。

2. 安装 OpenGL

OpenGL 本身是一个规范,而不是一个传统意义上的库。您通常会使用 GLAD(OpenGL 加载器)来管理函数指针,并使用 GLFW(图形库框架)来处理窗口和输入。
在这里插入图片描述

a. GLFW 安装

  1. 下载 GLFW: 访问 GLFW 官网,下载适用于 Visual Studio 2019 的预编译二进制文件(例如:“64-bit Windows binaries”)。
  2. 解压: 将下载的 ZIP 文件解压到一个方便的位置,例如 C:\Libraries\glfw-3.3.8
  3. 结构: 解压后的文件夹中会包含 include(用于头文件)和 lib(用于库文件)。
    在这里插入图片描述

b. GLAD 安装

在这里插入图片描述

  1. 访问 GLAD 官网: 前往 GLAD 官网
  2. 选择选项:
    • 语言: C/C++
    • 规范: OpenGL
    • API: 选择一个版本(例如 4.6)。请务必选择“Core”配置文件。
    • 扩展: 基本设置无需选择任何特定扩展。
    • 加载器: 勾选“Generate a loader”。
  3. 生成: 点击“Generate”并下载 ZIP 文件。
  4. 解压: 解压 ZIP 文件的内容。您会发现一个 include 文件夹,其中包含 KHRgladGLFW 相关的头文件。
  5. 复制头文件: 将解压后的 include 目录中的 gladKHR 文件夹复制到您的项目 include 目录中,或者一个公共的 include 目录(例如 C:\Libraries\glad\include)。

3. 安装 CUDA Toolkit

CUDA 对于利用 NVIDIA GPU 进行加速计算至关重要。

  1. 检查 GPU 兼容性: 确保您的 NVIDIA GPU 支持 CUDA。您可以在 NVIDIA CUDA GPU 页面 上查看。
  2. 下载 CUDA Toolkit: 访问 NVIDIA CUDA Toolkit 下载页面
    • 选择您的操作系统(Windows)、架构(x86_64)和 Visual Studio 版本(VS2019 对应 10.0)。
    • 选择“local”安装程序进行完整下载。
  3. 运行安装程序: 执行下载的安装程序。
    • 在安装过程中,选择自定义安装。
    • 重要提示: 如果安装程序试图安装比您当前 Visual Studio 版本更旧的集成,请取消选择 Visual Studio 集成。您需要最新的集成,这应该随您的 VS2019 安装提供,或者由 Visual Studio 自身更新。通常,让 CUDA 安装程序处理核心 CUDA 组件和驱动程序更安全。
    • 按照屏幕上的提示完成安装。
  4. 验证安装:
    • 打开命令提示符,输入 nvcc -V。您应该会看到 CUDA 编译器版本信息。
    • 检查您的系统 PATH 环境变量。您应该能看到类似 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\binC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\libnvvp 的条目。

set(CUDA_DIR "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2")
在这里插入图片描述


4. 安装 OpenCV

OpenCV(开源计算机视觉库)可能会更复杂一些,尤其是与 CUDA 集成时。我们将使用 CMake 从源代码构建它。
在这里插入图片描述

a. 下载 OpenCV 源代码

  1. 下载 OpenCV: 访问 GitHub 上的 OpenCV 发布页面,下载最新稳定版本的源代码(例如 opencv-4.x.x.zip)。
  2. 下载 OpenCV Contrib: 如果您需要额外的模块(如 SIFT、SURF 等,这些模块因专利问题已移至 contrib),也请从 OpenCV Contrib 发布页面 下载相应的 opencv_contrib-4.x.x.zip
  3. 解压: 创建一个文件夹,例如 C:\Libraries\opencv。将 opencv-4.x.x.zip 解压到 C:\Libraries\opencv\opencv-4.x.x,并将 opencv_contrib-4.x.x.zip 解压到 C:\Libraries\opencv\opencv_contrib-4.x.x

b. 使用 CMake 和 Visual Studio 2019 构建 OpenCV

  1. 安装 CMake: 如果您尚未安装,请从 CMake 官网 下载并安装 CMake。选择 Windows 安装程序。

  2. 创建构建目录: 在您的 C:\Libraries\opencv\opencv-4.x.x 文件夹中,创建一个新的空文件夹,命名为 build。因此路径将是 C:\Libraries\opencv\opencv-4.x.x\build

  3. 打开 CMake-GUI: 启动 CMake 图形用户界面(CMake-GUI)。

    • 源代码路径: 浏览到 C:\Libraries\opencv\opencv-4.x.x
    • 构建二进制文件路径: 浏览到 C:\Libraries\opencv\opencv-4.x.x\build
  4. 配置:

    • 点击 Configure
    • 选择您的生成器:选择 Visual Studio 16 2019
    • 选择平台:选择 x64
    • 点击 Finish
  5. 设置 CMake 选项: 配置完成后,会出现一个选项列表。以下是 CUDA 和 contrib 的关键选项:

    • BUILD_opencv_world:(可选,但推荐)勾选此项以构建单个 opencv_world 库。
    • OPENCV_EXTRA_MODULES_PATH:勾选此项并提供您的 opencv_contrib 模块路径,例如 C:\Libraries\opencv\opencv_contrib-4.x.x\modules
    • WITH_CUDA勾选此选项。 CMake 应该会自动检测您的 CUDA 安装。如果未检测到,您可能需要手动将 CUDA_TOOLKIT_ROOT_DIR 设置为您的 CUDA 安装路径(例如 C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/vX.Y)。
    • CUDA_ARCH_BIN:这很重要。在 此处 查找您 GPU 的计算能力。例如,如果您的 GPU 计算能力为 7.5,则输入 7.5(或 75)。您可以输入用分号分隔的多个计算能力(例如 6.1;7.5;8.6)。
    • WITH_OPENGL勾选此选项。
    • INSTALL_C_EXAMPLES:(可选)勾选以构建 C 示例。
    • INSTALL_PYTHON_EXAMPLES:(可选)如果不需 Python 示例,则取消勾选。
    • BUILD_EXAMPLES:(可选)勾选以构建示例。
    • BUILD_SHARED_LIBS:保持勾选以构建 DLL(动态库)。如果您更喜欢静态链接,请取消勾选。
    • BUILD_TESTS:(可选)取消勾选以加快构建速度。
  6. 重新配置并生成:

    • 再次点击 Configure,确保所有选项都已正确设置。红色条目应该会消失。
    • 点击 Generate。这将在您的 build 目录中生成 Visual Studio 解决方案文件。
  7. 在 Visual Studio 中构建:

    • 在 Visual Studio 2019 中打开 C:\Libraries\opencv\opencv-4.x.x\build\OpenCV.sln
    • 在“解决方案资源管理器”中,右键单击 ALL_BUILD 项目,然后选择生成。这将编译所有 OpenCV 模块。这可能需要很长时间。
    • ALL_BUILD 完成后,右键单击 INSTALL 项目,然后选择生成。这会将编译好的库、头文件和 DLL 复制到 C:\Libraries\opencv\opencv-4.x.x\build\install 目录(或您在 CMake 配置期间指定为 CMAKE_INSTALL_PREFIX 的路径)。

5. 设置 Visual Studio 2019 项目

现在所有组件都已安装,让我们在 Visual Studio 中创建一个新项目并链接到这些库。

  1. 创建新项目:
    • 打开 Visual Studio 2019。
    • 点击“创建新项目”。
    • 选择“控制台应用”(适用于 C++)。
    • 为您的项目命名并选择位置。
  2. 配置项目属性:
    • 在“解决方案资源管理器”中,右键单击您的项目,然后选择属性
    • 确保将配置设置为 所有配置,平台设置为 x64

a. 包含目录(Include Directories)

  • 转到 VC++ 目录 > 包含目录
  • 添加以下路径:
    • C:\Libraries\glfw-3.3.8\include
    • C:\Libraries\glad\include(或您放置 GLAD 头文件的位置)
    • C:\Libraries\opencv\opencv-4.x.x\build\install\include
    • C:\Libraries\opencv\opencv-4.x.x\build\install\include\opencv2
    • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\include(将 vX.Y 替换为您的 CUDA 版本)

b. 库目录(Library Directories)

  • 转到 VC++ 目录 > 库目录
  • 添加以下路径:
    • C:\Libraries\glfw-3.3.8\lib-vc2019(或 GLFW 下载中与您 VS 版本对应的 lib-vcXXXX
    • C:\Libraries\opencv\opencv-4.x.x\build\install\x64\vc16\lib(或与您 VS 版本对应的 vcXX
    • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\lib\x64

c. 链接器 > 输入 > 附加依赖项(Linker > Input > Additional Dependencies)

  • 转到 链接器 > 输入 > 附加依赖项
  • 添加以下 .lib 文件:
    • glfw3.lib
    • opengl32.lib(标准 Windows OpenGL 库)
    • opencv_world4xx.lib(或调试版本 opencv_world4xxd.lib,将 4xx 替换为您的 OpenCV 版本,例如 opencv_world460.lib

d. 复制 DLL 文件(重要)

对于动态链接,您还需要确保相关的 DLL 文件在可执行文件旁边或系统 PATH 中。

  • OpenCV DLLs:C:\Libraries\opencv\opencv-4.x.x\build\install\x64\vc16\bin 目录下的所有 DLL 文件复制到您项目可执行文件(.exe)所在的目录(通常是 DebugRelease 文件夹)。
  • CUDA DLLs: 通常 CUDA DLLs 已经添加到系统 PATH 中,但如果没有,您可能需要将 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\bin 添加到系统 PATH,或者将其中的 DLLs 复制到项目可执行文件目录。
  • GLFW DLLs:C:\Libraries\glfw-3.3.8\lib-vc2019 目录下的 glfw3.dll 复制到您项目可执行文件所在的目录。

6. 示例代码(测试)

现在您可以编写一些简单的代码来测试您的安装了。

OpenGL 和 GLFW 示例

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>

void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);

const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

int main()
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif

    GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }

    while (!glfwWindowShouldClose(window))
    {
        processInput(window);

        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

OpenCV 和 CUDA 示例

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp> // For CUDA-accelerated image processing
#include <iostream>

int main() {
    // Check if CUDA is available
    if (cv::cuda::getCudaEnabledDeviceCount() > 0) {
        std::cout << "CUDA is available!" << std::endl;
        // Print device properties
        cv::cuda::DeviceInfo info;
        std::cout << "GPU Device Name: " << info.name() << std::endl;
        std::cout << "Total Memory: " << info.totalGlobalMem() / (1024.0 * 1024.0) << " MB" << std::endl;

        // Example: Upload an image to GPU, convert to grayscale, download back
        cv::Mat hostImage = cv::imread("path/to/your/image.jpg", cv::IMREAD_COLOR); // Replace with a valid image path

        if (hostImage.empty()) {
            std::cerr << "Error: Could not open or find the image!" << std::endl;
            return -1;
        }

        cv::cuda::GpuMat gpuImage;
        gpuImage.upload(hostImage); // Upload to GPU

        cv::cuda::GpuMat gpuGrayImage;
        cv::cuda::cvtColor(gpuImage, gpuGrayImage, cv::COLOR_BGR2GRAY); // Convert to grayscale on GPU

        cv::Mat hostGrayImage;
        gpuGrayImage.download(hostGrayImage); // Download back to CPU

        cv::imshow("Original Image", hostImage);
        cv::imshow("Grayscale Image (CUDA)", hostGrayImage);
        cv::waitKey(0);

    } else {
        std::cout << "CUDA is NOT available. Running CPU-only OpenCV." << std::endl;
        cv::Mat hostImage = cv::imread("path/to/your/image.jpg", cv::IMREAD_COLOR); // Replace with a valid image path
        if (hostImage.empty()) {
            std::cerr << "Error: Could not open or find the image!" << std::endl;
            return -1;
        }
        cv::Mat hostGrayImage;
        cv::cvtColor(hostImage, hostGrayImage, cv::COLOR_BGR2GRAY);
        cv::imshow("Original Image", hostImage);
        cv::imshow("Grayscale Image (CPU)", hostGrayImage);
        cv::waitKey(0);
    }

    return 0;
}

重要提示: 在运行 OpenCV 示例之前,请确保将 path/to/your/image.jpg 替换为计算机上实际存在的图像文件的路径。


至此,您应该已经成功配置了 CMake、Visual Studio 2019 下的 OpenGL、OpenCV 和 CUDA 环境。如果在过程中遇到任何问题,请仔细检查路径和环境变量,这通常是问题所在。

您在设置过程中遇到任何具体问题了吗?
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到