当前位置: 首页 > news >正文

【配置环境】Visual Studio 配置 OpenCV

目录

一,环境

二,下载和配置 OpenCV

三,创建一个 Visual Studio 项目

四,配置 Visual Studio 项目

五,编写并编译 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.加载和显示图像:创建一个程序,能够加载图像文件并将其显示在窗口中。

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

相关文章:

【配置环境】Visual Studio 配置 OpenCV

目录 一&#xff0c;环境 二&#xff0c;下载和配置 OpenCV 三&#xff0c;创建一个 Visual Studio 项目 四&#xff0c;配置 Visual Studio 项目 五&#xff0c;编写并编译 OpenCV 程序 六&#xff0c;解决CMake编译OpenCV报的错误 一&#xff0c;环境 Windows 11 家庭中…...

java.sql.SQLException: com.mysql.cj.jdbc.Driver

这篇文章分享一下Springboot整合Elasticsearch时遇到的一个问题&#xff0c;项目正常启动&#xff0c;但是查询数据库的时候发生了一个异常java.sql.SQLException: com.mysql.cj.jdbc.Driver java.sql.SQLException: com.mysql.cj.jdbc.Driverat com.alibaba.druid.util.JdbcU…...

React笔记(四)类组件(2)

一、类组件的props属性 组件中的数据&#xff0c;除了组件内部的状态使用state之外&#xff0c;状态也可以来自组件的外部&#xff0c;外部的状态使用类组件实例上另外一个属性来表示props 1、基本的使用 在components下创建UserInfo组件 import React, { Component } from…...

点云从入门到精通技术详解100篇-点云信息编码

目录 前言 研究发展现状 点云几何信息压缩 点云属性信息压缩 点云压缩算法的相关技术...

Python爬虫解析网页内容

Python爬虫是一种自动化程序&#xff0c;可以模拟人类用户访问网页&#xff0c;获取网页中的内容。爬虫在信息采集、数据分析和网络监测等领域有着广泛的应用。在爬虫过程中&#xff0c;解析网页内容是非常重要的一步。 Python提供了许多强大的库和工具&#xff0c;用于解析网…...

从零开始学习Python爬虫技术,并应用于市场竞争情报收集

在当今信息爆炸的时代&#xff0c;市场竞争情报收集对企业的发展至关重要。Python爬虫技术可以帮助我们高效地收集网络上的有价值信息。本文将从零开始介绍Python爬虫技术&#xff0c;并探讨如何将其应用于市场竞争情报收集。 一、Python爬虫技术基础 安装Python环境 首先&…...

SpringCloudGateway集成SpringDoc CORS问题

SpringCloudGateway集成SpringDoc CORS问题 集成SpringDoc后&#xff0c;在gateway在线文档界面&#xff0c;请求具体的服务接口&#xff0c;报CORS问题 Failed to fetch. Possible Reasons: CORS Network Failure URL scheme must be “http” or “https” for CORS reques…...

国际版阿里云/腾讯云:弹性高性能计算E-HPC入门概述

入门概述 本文介绍E-HPC的运用流程&#xff0c;帮助您快速上手运用弹性高性能核算。 下文以创立集群&#xff0c;在集群中安装GROMACS软件并运转水分子算例进行高性能核算为例&#xff0c;介绍弹性高性能核算的运用流程&#xff0c;帮助您快速上手运用弹性高性能核算。运用流程…...

【博客702】shell flock实现单例模式执行任务

shell flock实现单例模式执行任务 场景 我们需要定时执行一个任务&#xff0c;并且保证每次执行时都需要上一次已经执行完了&#xff0c;即保证同一时间只有一个在运行 示例 假设需要执行的脚本是&#xff1a;ping_and_mtr.sh 创建一个新的脚本来运行你的逻辑脚本&#xff1…...

数据分析基础-数据可视化07-用数据分析讲故事

如何构建⼀个引⼈⼊胜的故事&#xff1f; ⾸先&#xff1a;要想象什么&#xff1f; 可视化什么⽐如何可视化更重要 统计分析&#xff1a;GIGO&#xff08;垃圾输⼊&#xff0c;垃圾输出&#xff09; 在可视化分析环境中&#xff1a; 吉⾼ → 您⽆法从可视化的不适当数据中获…...

策略模式简介

概念&#xff1a; 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装到独立的类中&#xff0c;使得它们可以互相替换。通过使用策略模式&#xff0c;客户端可以在运行时选择不同的算法来解决…...

学术加油站|基于端到端性能的学习型基数估计器综合测评

编者按 本文系东北大学李俊虎所著&#xff0c;也是「 OceanBase 学术加油站」系列第 11 篇内容。 「李俊虎&#xff1a;东北大学计算机科学与工程学院在读硕士生&#xff0c;课题方向为数据库查询优化&#xff0c;致力于应用 AI 技术改进传统基数估计器&#xff0c;令数据库选…...

MySQL 使用规范 —— 如何建好字段和索引

一、案例背景 二、库表规范 1. 建表相关规范 2. 字段相关规范 3. 索引相关规范 4. 使用相关规范 三、建表语句 三、语句操作 1. 插入操作 2. 查询操作 四、其他配置 1. 监控活动和性能&#xff1a; 2. 连接数查询和配置 本文的宗旨在于通过简单干净实践的方式教会读…...

Relation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning

本文是LLM系列文章&#xff0c;针对《Relation Extraction as Open-book Examination: Retrieval 关系提取作为开卷测试&#xff1a;检索增强提示调整 摘要1 引言2 方法3 实验4 相关工作5 结论 摘要 经过预训练的语言模型通过表现出显著的小样本学习能力&#xff0c;对关系提取…...

FFmpeg报错:Connection to tcp://XXX?timeout=XXX failed: Connection timed out

一、现象 通过FFmpeg&#xff08;FFmpeg的版本是5.0.3&#xff09;拉摄像机的rtsp流获取音视频数据&#xff0c;执行命令&#xff1a; ./ffmpeg -timeout 3000000 -i "rtsp://172.16.17.156/stream/video5" 报错&#xff1a;Connection to tcp://XXX?timeoutXXX …...

iOS开发Swift-7-得分,问题序号,约束对象,提示框,类方法与静态方法-趣味问答App

1.根据用户回答计算得分 ViewController.swift: import UIKitclass ViewController: UIViewController {var questionIndex 0var score 0IBOutlet weak var questionLabel: UILabel!IBOutlet weak var scoreLabel: UILabel!override func viewDidLoad() {super.viewDidLoad()…...

AUTOSAR规范与ECU软件开发(实践篇)7.10MCAL模块配置方法及常用接口函数介绍之Base与Resource的配置

目录 1、前言 2 、Base与Resource模块 1、前言 本例程的硬件平台为MPC5744P开发板&#xff0c;主要配置MPC5744P的mcal的每个模块的配置&#xff0c;如要配置NXP的MCU之S32k324的例程请参考&#xff1a; 2 、Base与Resource模块 Base与Resource这两个模块与具体功能无关&…...

Android11编译第二弹:USB连接MTP模式+USB调试+USB信任

一、为什么需要开启USB信任和ADB调试 问题1&#xff1a;原始的AOSP&#xff0c;如果通过USB连接设备以后&#xff0c;会弹窗提示用户选择连接模式&#xff1a;MTP&#xff0c;大容量磁盘&#xff0c;照片等模式&#xff1b; 问题2&#xff1a;USB连接设备以后&#xff0c;需要…...

Unity ShaderGraph教程——基础shader

1.基本贴图shader&#xff1a; 基础贴图实现&#xff1a;主贴图、自发光贴图、光滑度贴图、自发光贴图&#xff08;自发光还加入了颜色影响和按 钮开关&#xff09;. 步骤&#xff1a;最左侧操作组——新建texture2D——新建sample texture 2D承…...

第 3 章 栈和队列(单链队列)

1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端删除元素。 2. 示例代码 1&#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...