【配置环境】Visual Studio 配置 OpenCV

目录

一,环境

[二,下载和配置 OpenCV](#二,下载和配置 OpenCV)

[三,创建一个 Visual Studio 项目](#三,创建一个 Visual Studio 项目)

[四,配置 Visual Studio 项目](#四,配置 Visual Studio 项目)

[五,编写并编译 OpenCV 程序](#五,编写并编译 OpenCV 程序)

六,解决CMake编译OpenCV报的错误


一,环境

  • Windows 11 家庭中文版
  • Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.5.3
  • OpenCV -- 4.8.0

二,下载和配置 OpenCV

1.在Windows下安装OpenCV,你通常有两种选择

  1. 使用预编译的二进制库(推荐): 这是最常见的方法。可以从OpenCV官方网站下载已经编译好的二进制版本,无需自己编译。这些预编译库已经包含了OpenCV的头文件和库文件,可以直接在项目中使用。
    1. 前往 OpenCV Releases 页面 下载最新的版本(选择Windows版)。
    2. 解压下载的文件到指定路径下,会得到一个文件夹,例如opencv/build,内容参考如下。然后按照前面提到的方式配置你的项目以使用这些预编译库。
  2. 从源代码编译OpenCV(高级选项): 如果你需要进行高级配置、自定义编译选项或者希望在Windows上编译OpenCV的源代码,你可以选择这种方法。但这通常较为复杂,需要更多时间和资源。
    1. 首先,从OpenCV的 GitHub仓库 下载源代码。
    2. 安装CMake,可以从 CMake官网 下载并安装最新的CMake版本,这是一个用于配置和生成编译项目的工具。
    3. 打开CMake GUI,在 "Where is the source code" 中选择OpenCV的源代码目录。在 "Where to build the binaries" 中选择一个用于生成编译结果的目标文件夹,通常建议在源代码目录之外创建一个名为 "build" 的文件夹。
    4. 点击 "Configure" 按钮。CMake将提示你选择生成器,选择合适的Visual Studio版本(例如,Visual Studio 2022)。
    5. CMake编译过程中可能会报一些红色的错误的提示信息,解决办法看最后一节。
    6. 配置选项:在CMake配置过程中,可以根据需要设置不同的选项,如编译类型、安装路径、开启/关闭模块等。确保根据自己的需求进行配置。(网上搜索)
    7. 点击 "Generate" 按钮,这将生成一个Visual Studio项目文件。
    8. 打开生成的Visual Studio项目文件(通常是.sln文件)。
    9. 在Visual Studio中,选择 "Release" 或 "Debug" 配置(根据需要选择),然后点击 "生成"(Build)按钮。这将编译OpenCV。
    10. 编译完成后,可以在生成的目标文件夹中找到编译好的OpenCV库文件(通常在 build/install 文件夹下)。

2.配置 OpenCV 环境变量

  1. 使用键盘快捷键 Win + R 打开运行对话框。在运行对话框中,输入 sysdm.cpl,然后按 Enter 键。这将直接打开系统属性窗口的 "高级" 选项卡,从那里访问环境变量配置。
  2. 添加OpenCV的 bin 文件夹路径,以便系统可以找到OpenCV的DLL文件。例如:D:\Program Files\OpenCV\build\x64\vc16\bin(请根据你的实际路径进行替换)。
  3. 添加OpenCV的 lib 文件夹路径,以便编译器和连接器可以找到OpenCV的库文件。例如:D:\Program Files\OpenCV\build\x64\vc16\lib(请根据你的实际路径进行替换)。
  4. 确保点击了 "确定" 按钮,然后关闭所有窗口。
  5. 打开命令提示符,输入 opencv_version 命令,检查OpenCV是否配置成功。如果配置成功,会输出OpenCV的版本号,表明OpenCV库可在命令行中正常运行。

三,创建一个 Visual Studio 项目

使用Visual Studio创建一个新的C++项目,或者打开一个现有的项目。

四,配置 Visual Studio 项目

  1. 打开项目属性,选择 "配置属性 > VC++ 目录",然后将 "包含目录" 配置为包含OpenCV的include文件夹(opencv\build\include),将 "库目录" 配置为包含OpenCV的lib文件夹(opencv\build\x64\vc16\lib)。
  2. 在 "配置属性 > 链接器 > 输入" 下,将 "附加依赖项" 添加要使用的 OpenCV 库文件(例如 opencv_world480d.lib)。

五,编写并编译 OpenCV 程序

以下是一些基本图像处理程序

**1.加载和显示图像:**创建一个程序,能够加载图像文件并将其显示在窗口中。

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

//#pragma comment(lib,"opencv_world480d.lib")

int main() {
    // 加载图像
    cv::Mat image = cv::imread("your_image.jpg");
    if (image.empty()) {
        std::cerr << "Error: Could not read image file." << std::endl;
        return -1;
    }

    // 显示图像
    cv::imshow("My Image", image);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

**2.调整图像大小:**编写代码,可以加载图像并调整其大小。

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

//#pragma comment(lib,"opencv_world480d.lib")

int main() {
    // 加载图像
    cv::Mat image = cv::imread("your_image.jpg");
    if (image.empty()) {
        std::cerr << "Error: Could not read image file." << std::endl;
        return -1;
    }

    // 调整图像大小
    cv::Size newSize(800, 600);
    cv::Mat resizedImage;
    cv::resize(image, resizedImage, newSize);

    // 显示调整后的图像
    cv::imshow("Resized Image", resizedImage);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

3.应用滤波器:学习如何应用常见的图像滤波器,例如高斯滤波器。

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

//#pragma comment(lib,"opencv_world480d.lib")

int main() {
    // 加载图像
    cv::Mat image = cv::imread("your_image.jpg");
    if (image.empty()) {
        std::cerr << "Error: Could not read image file." << std::endl;
        return -1;
    }

    // 应用高斯滤波
    cv::Mat blurredImage;
    cv::GaussianBlur(image, blurredImage, cv::Size(5, 5), 0);

    // 显示模糊图像
    cv::imshow("Blurred Image", blurredImage);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

4.检测边缘:创建一个程序,用于检测图像中的边缘。

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

//#pragma comment(lib,"opencv_world480d.lib")

int main() {
    // 加载图像
    cv::Mat image = cv::imread("your_image.jpg");
    if (image.empty()) {
        std::cerr << "Error: Could not read image file." << std::endl;
        return -1;
    }

    // 检测边缘
    cv::Mat edges;
    cv::Canny(image, edges, 100, 200);

    // 显示边缘图像
    cv::imshow("Edge Image", edges);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

5.图像转换:练习图像颜色空间的转换,如将彩色图像转换为灰度图像,并将图像从RGB颜色空间转换为HSV颜色空间。

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

//#pragma comment(lib,"opencv_world480d.lib")

int main() {
    // 加载图像
    cv::Mat image = cv::imread("your_image.jpg");
    if (image.empty()) {
        std::cerr << "Error: Could not read image file." << std::endl;
        return -1;
    }

    // 转换为灰度图像
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // 显示灰度图像
    cv::imshow("Gray Image", grayImage);
    cv::waitKey(0);
    cv::destroyAllWindows();

    // 转换为HSV颜色空间
    cv::Mat hsvImage;
    cv::cvtColor(image, hsvImage, cv::COLOR_BGR2HSV);

    // 分离通道
    std::vector<cv::Mat> channels;
    cv::split(hsvImage, channels);

    // 显示H、S、V通道
    cv::imshow("Hue Channel", channels[0]); // H通道
    cv::imshow("Saturation Channel", channels[1]); // S通道
    cv::imshow("Value Channel", channels[2]); // V通道
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

6.要深入理解OpenCV,官网也提供了丰富的示例代码,如下。

六,解决CMake编译OpenCV报的错误

1.定位问题

  • 以下错误表示检测到了Python解释器的版本与期望的版本不符,但这个错误可以忽略,不用管

  • 但后面会出现很多如下这种错误,就是不能从指定的链接中下载需要的文件资源,详细情况可以看 build/CMakeDownloadLog.txt 文件。

  • CMakeDownloadLog.txt 文件用途:

    • CMakeDownloadLog.txt 文件是由CMake工具生成的日志文件,主要用于记录CMake在下载依赖项和外部资源时的详细信息。
    • CMakeDownloadLog.txt 文件对于排查和调试依赖项下载问题非常有用。当在使用CMake配置或构建项目时,如果下载依赖项失败或遇到与外部资源相关的问题,可以查看这个文件以获取更多信息,以便进一步解决问题。
  • 打开 CMakeDownloadLog.txt 文件后,会显示如下信息,其中的每一段都是我们要解决的错误:
    2.分析问题

  • 先分析这些错误信息是什么意思,然后我们就很容易的去解决问题了,摘取其中一段显示如下(其它都是类似的问题)

  • 其中红框的内容解释如下:

    • #do_copy:这是一个命令,表示从指定的URL下载名为 "ffmpeg_version.cmake" 的文件,并将其复制到本地目录 "D:/opencv/build/3rdparty/ffmpeg"。并且该文件的MD5哈希值文设置为 "8862c87496e2e8c375965e1277dee1c7"。
    • #missing:这是一条信息,表示在指定的本地目录中没有找到名为 "ffmpeg_version.cmake" 的文件。
    • #check_md5:这是一条信息,表示检查名为 "ffmpeg_version.cmake" 文件的MD5哈希值,以验证文件完整性。
    • #mismatch_md5:这是一条信息,表示本地文件的MD5哈希值与预期值 "d41d8cd98f00b204e9800998ecf8427e" 不匹配,说明文件可能已损坏或缺失。
    • #delete:这是一条命令,表示删除本地缓存目录中的文件。
    • #cmake_download:这是一条命令,表示尝试从指定的URL重新下载文件。
    • #try 1:这是一条信息,表示这是第一次尝试下载文件。
    • 总的来说 :do_copy 尝试从指定的URL下载名为 "ffmpeg_version.cmake" 的文件,并保存到本地目录 "D:/opencv/build/3rdparty/ffmpeg"。首先,它检查本地目录中是否已经存在文件 "ffmpeg_version.cmake",但没有找到该文件(missing)。然后,它尝试根据文件的MD5哈希值检查本地缓存目录中是否有与下载文件匹配的文件,但发现MD5哈希值不匹配(mismatch_md5)。接下来,它尝试从指定的URL下载文件,并在第一次尝试时遇到了网络问题。
  • 具体的错误信息:

    • # timeout on name lookup is not supported:这个错误消息表示在进行DNS名称解析时发生了超时错误。CMake试图解析主机名 "raw.githubusercontent.com",但因为解析超时,所以无法连接到该主机。
    • # getaddrinfo(3) failed for raw.githubusercontent.com:443:这个错误消息表明获取主机地址信息失败,其中 "raw.githubusercontent.com:443" 是要解析的主机名和端口。
    • # Could not resolve host: raw.githubusercontent.com:这个错误消息指出无法解析主机名 "raw.githubusercontent.com"。
    • # Closing connection 0:这是一条信息,表示关闭了与主机的连接。
    • 总结:这些错误的主要原因是CMake无法通过DNS解析找到主机名 "raw.githubusercontent.com",因此无法连接到GitHub服务器以下载所需的文件 "ffmpeg_version.cmake"。
      3.解决问题
  • 确定了问题原因是无法下载 ffmpeg_version.cmake 文件,浏览器输入指定的URL后,显示如下信息:

  • 接下来就是要下载 ffmpeg_version.cmake 文件,然后覆盖D:/opencv/source/.cache/ffmpeg/8862c87496e2e8c375965e1277dee1c7-ffmpeg_version.cmake 文件,再进行编译就行了。

相关推荐
凤枭香6 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ctrey_7 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
可均可可8 小时前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
蒙娜丽宁8 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
plmm烟酒僧9 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
AI小杨9 小时前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
冷凝女子10 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
羊小猪~~12 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
撞南墙者12 小时前
OpenCV自学系列(1)——简介和GUI特征操作
人工智能·opencv·计算机视觉
柳鲲鹏13 小时前
OpenCV视频防抖源码及编译脚本
人工智能·opencv·计算机视觉