在 CMake 和 Visual Studio 2019 環境下安裝和配置 OpenGL、OpenCV 以及 CUDA 可能會有些復雜,因為涉及的組件多且相互依賴。以下是一個詳細的指南,幫助您逐步完成安裝和配置。
1. 前提條件
在開始之前,請確保您已安裝以下軟件:
- Visual Studio 2019: 安裝時請選擇“使用 C++ 的桌面開發”工作負載。如果您計劃進行更廣泛的圖形編程,也可以考慮包含“使用 C++ 的游戲開發”工作負載,因為它包含了一些 OpenGL 相關組件。
- C++ 編譯器: Visual Studio 2019 自帶 MSVC,我們將使用它。
2. 安裝 OpenGL
OpenGL 本身是一個規范,而不是一個傳統意義上的庫。您通常會使用 GLAD(OpenGL 加載器)來管理函數指針,并使用 GLFW(圖形庫框架)來處理窗口和輸入。
a. GLFW 安裝
- 下載 GLFW: 訪問 GLFW 官網,下載適用于 Visual Studio 2019 的預編譯二進制文件(例如:“64-bit Windows binaries”)。
- 解壓: 將下載的 ZIP 文件解壓到一個方便的位置,例如
C:\Libraries\glfw-3.3.8
。 - 結構: 解壓后的文件夾中會包含
include
(用于頭文件)和lib
(用于庫文件)。
b. GLAD 安裝
- 訪問 GLAD 官網: 前往 GLAD 官網。
- 選擇選項:
- 語言: C/C++
- 規范: OpenGL
- API: 選擇一個版本(例如
4.6
)。請務必選擇“Core”配置文件。 - 擴展: 基本設置無需選擇任何特定擴展。
- 加載器: 勾選“Generate a loader”。
- 生成: 點擊“Generate”并下載 ZIP 文件。
- 解壓: 解壓 ZIP 文件的內容。您會發現一個
include
文件夾,其中包含KHR
、glad
和GLFW
相關的頭文件。 - 復制頭文件: 將解壓后的
include
目錄中的glad
和KHR
文件夾復制到您的項目include
目錄中,或者一個公共的include
目錄(例如C:\Libraries\glad\include
)。
3. 安裝 CUDA Toolkit
CUDA 對于利用 NVIDIA GPU 進行加速計算至關重要。
- 檢查 GPU 兼容性: 確保您的 NVIDIA GPU 支持 CUDA。您可以在 NVIDIA CUDA GPU 頁面 上查看。
- 下載 CUDA Toolkit: 訪問 NVIDIA CUDA Toolkit 下載頁面。
- 選擇您的操作系統(Windows)、架構(x86_64)和 Visual Studio 版本(VS2019 對應 10.0)。
- 選擇“local”安裝程序進行完整下載。
- 運行安裝程序: 執行下載的安裝程序。
- 在安裝過程中,選擇自定義安裝。
- 重要提示: 如果安裝程序試圖安裝比您當前 Visual Studio 版本更舊的集成,請取消選擇 Visual Studio 集成。您需要最新的集成,這應該隨您的 VS2019 安裝提供,或者由 Visual Studio 自身更新。通常,讓 CUDA 安裝程序處理核心 CUDA 組件和驅動程序更安全。
- 按照屏幕上的提示完成安裝。
- 驗證安裝:
- 打開命令提示符,輸入
nvcc -V
。您應該會看到 CUDA 編譯器版本信息。 - 檢查您的系統
PATH
環境變量。您應該能看到類似C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\bin
和C:\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 源代碼
- 下載 OpenCV: 訪問 GitHub 上的 OpenCV 發布頁面,下載最新穩定版本的源代碼(例如
opencv-4.x.x.zip
)。 - 下載 OpenCV Contrib: 如果您需要額外的模塊(如 SIFT、SURF 等,這些模塊因專利問題已移至 contrib),也請從 OpenCV Contrib 發布頁面 下載相應的
opencv_contrib-4.x.x.zip
。 - 解壓: 創建一個文件夾,例如
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
-
安裝 CMake: 如果您尚未安裝,請從 CMake 官網 下載并安裝 CMake。選擇 Windows 安裝程序。
-
創建構建目錄: 在您的
C:\Libraries\opencv\opencv-4.x.x
文件夾中,創建一個新的空文件夾,命名為build
。因此路徑將是C:\Libraries\opencv\opencv-4.x.x\build
。 -
打開 CMake-GUI: 啟動 CMake 圖形用戶界面(CMake-GUI)。
- 源代碼路徑: 瀏覽到
C:\Libraries\opencv\opencv-4.x.x
。 - 構建二進制文件路徑: 瀏覽到
C:\Libraries\opencv\opencv-4.x.x\build
。
- 源代碼路徑: 瀏覽到
-
配置:
- 點擊 Configure。
- 選擇您的生成器:選擇
Visual Studio 16 2019
。 - 選擇平臺:選擇
x64
。 - 點擊 Finish。
-
設置 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
:(可選)取消勾選以加快構建速度。
-
重新配置并生成:
- 再次點擊 Configure,確保所有選項都已正確設置。紅色條目應該會消失。
- 點擊 Generate。這將在您的
build
目錄中生成 Visual Studio 解決方案文件。
-
在 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
的路徑)。
- 在 Visual Studio 2019 中打開
5. 設置 Visual Studio 2019 項目
現在所有組件都已安裝,讓我們在 Visual Studio 中創建一個新項目并鏈接到這些庫。
- 創建新項目:
- 打開 Visual Studio 2019。
- 點擊“創建新項目”。
- 選擇“控制臺應用”(適用于 C++)。
- 為您的項目命名并選擇位置。
- 配置項目屬性:
- 在“解決方案資源管理器”中,右鍵單擊您的項目,然后選擇屬性。
- 確保將配置設置為
所有配置
,平臺設置為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
)所在的目錄(通常是Debug
或Release
文件夾)。 - 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);
#endifGLFWwindow* 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 availableif (cv::cuda::getCudaEnabledDeviceCount() > 0) {std::cout << "CUDA is available!" << std::endl;// Print device propertiescv::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 backcv::Mat hostImage = cv::imread("path/to/your/image.jpg", cv::IMREAD_COLOR); // Replace with a valid image pathif (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 GPUcv::cuda::GpuMat gpuGrayImage;cv::cuda::cvtColor(gpuImage, gpuGrayImage, cv::COLOR_BGR2GRAY); // Convert to grayscale on GPUcv::Mat hostGrayImage;gpuGrayImage.download(hostGrayImage); // Download back to CPUcv::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 pathif (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 環境。如果在過程中遇到任何問題,請仔細檢查路徑和環境變量,這通常是問題所在。
您在設置過程中遇到任何具體問題了嗎?