0


【配置环境】Visual Studio 配置 OpenCV

一,环境

  • Windows 11 家庭中文版
  • Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.5.3
  • CMake – 3.24.1
  • 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),选择需要生成的位数(默认为64位)。5. CMake编译过程中可能会报一些红色的错误的提示信息,解决办法看最后一节。(可以跳过这些错误)6. 配置选项:在CMake配置过程中,可以根据需要设置不同的选项,如编译类型、安装路径、开启/关闭模块等。确保根据自己的需求进行配置。(网上搜索)7. 点击 “Generate” 按钮,这将生成一个Visual Studio项目文件。8. 打开生成的Visual Studio项目文件(通常是.sln文件),或者点击CMake界面的“Open Project”。9. 在Visual Studio中,选择 “Release” 或 “Debug” 配置(根据需要选择),然后找到 “CMakeTargets > INSTALL” 文件,右击该文件选择 “生成” 选项。这将编译OpenCV。 10. 编译完成后,可以在生成的目标文件夹中找到编译好的OpenCV库文件(通常在 build/install 文件夹下)。11. 按照上面方式可以自行构建Release/Debug,64/32位的库。

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.跟随项目进行配置(推荐)

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

2.全局配置(不推荐)

  1. 点击工具栏的 “视图” 视图项。展开后点击 “其它窗口 > 属性管理器”。
  2. 然后会得到四种不同的模式,在每种模式目录下会默认有几个系统文件,这里对 “xxx.64.user” 系统文件按照前面提到的方式配置当前项目以使用这些编译库,在这些系统文件中进行的属性配置是全局配置。
  3. 也可以新添一个属性文件,然后也按照前面提到的方式配置当前项目以使用这些编译库,该属性文件是保存在当前项目目录下的(这种配置是跟随项目的,可以对四种模式都新添一个属性文件)。

五,编写并编译 OpenCV 程序

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

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

#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.调整图像大小:编写代码,可以加载图像并调整其大小。

#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.应用滤波器:学习如何应用常见的图像滤波器,例如高斯滤波器。

#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.检测边缘:创建一个程序,用于检测图像中的边缘。

#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颜色空间。

#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 文件,再进行编译就行了。

七,本人编译好的库

百度网盘链接:VS2022编译的OpenCV库,四种模式下都可以使用(Release32,Release64,Debug32,Debug64)。

标签: visual studio opencv

本文转载自: https://blog.csdn.net/weixin_43729127/article/details/132635245
版权归原作者 拉伊卜 所有, 如有侵权,请联系我们删除。

“【配置环境】Visual Studio 配置 OpenCV”的评论:

还没有评论