【配置环境】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,你通常有两种选择
- 使用预编译的二进制库(推荐): 这是最常见的方法。可以从OpenCV官方网站下载已经编译好的二进制版本,无需自己编译。这些预编译库已经包含了OpenCV的头文件和库文件,可以直接在项目中使用。
- 前往 OpenCV Releases 页面 下载最新的版本(选择Windows版)。
- 解压下载的文件到指定路径下,会得到一个文件夹,例如
opencv/build,
内容参考如下。然后按照前面提到的方式配置你的项目以使用这些预编译库。- 从源代码编译OpenCV(高级选项): 如果你需要进行高级配置、自定义编译选项或者希望在Windows上编译OpenCV的源代码,你可以选择这种方法。但这通常较为复杂,需要更多时间和资源。
- 首先,从OpenCV的 GitHub仓库 下载源代码。
- 安装CMake,可以从 CMake官网 下载并安装最新的CMake版本,这是一个用于配置和生成编译项目的工具。
- 打开CMake GUI,在 “Where is the source code” 中选择OpenCV的源代码目录。在 “Where to build the binaries” 中选择一个用于生成编译结果的目标文件夹,通常建议在源代码目录之外创建一个名为 “build” 的文件夹。
- 点击 “Configure” 按钮。CMake将提示你选择生成器,选择合适的Visual Studio版本(例如,Visual Studio 2022)。
- CMake编译过程中可能会报一些红色的错误的提示信息,解决办法看最后一节。
- 配置选项:在CMake配置过程中,可以根据需要设置不同的选项,如编译类型、安装路径、开启/关闭模块等。确保根据自己的需求进行配置。(网上搜索)
- 点击 “Generate” 按钮,这将生成一个Visual Studio项目文件。
- 打开生成的Visual Studio项目文件(通常是.sln文件)。
- 在Visual Studio中,选择 “Release” 或 “Debug” 配置(根据需要选择),然后点击 “生成”(Build)按钮。这将编译OpenCV。
- 编译完成后,可以在生成的目标文件夹中找到编译好的OpenCV库文件(通常在
build/install
文件夹下)。
2.配置 OpenCV 环境变量
- 使用键盘快捷键 Win + R 打开运行对话框。在运行对话框中,输入
sysdm.cpl
,然后按 Enter 键。这将直接打开系统属性窗口的 “高级” 选项卡,从那里访问环境变量配置。- 添加OpenCV的
bin
文件夹路径,以便系统可以找到OpenCV的DLL文件。例如:D:\Program Files\OpenCV\build\x64\vc16\bin
(请根据你的实际路径进行替换)。- 添加OpenCV的
lib
文件夹路径,以便编译器和连接器可以找到OpenCV的库文件。例如:D:\Program Files\OpenCV\build\x64\vc16\lib
(请根据你的实际路径进行替换)。- 确保点击了 "确定" 按钮,然后关闭所有窗口。
- 打开命令提示符,输入 opencv_version 命令,检查OpenCV是否配置成功。如果配置成功,会输出OpenCV的版本号,表明OpenCV库可在命令行中正常运行。
三,创建一个 Visual Studio 项目
使用Visual Studio创建一个新的C++项目,或者打开一个现有的项目。
四,配置 Visual Studio 项目
- 打开项目属性,选择 “配置属性 > VC++ 目录”,然后将 “包含目录” 配置为包含OpenCV的
include
文件夹(opencv\build\include
),将 “库目录” 配置为包含OpenCV的lib
文件夹(opencv\build\x64\vc16\lib
)。- 在 “配置属性 > 链接器 > 输入” 下,将 “附加依赖项” 添加要使用的 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
目录 一,环境 二,下载和配置 OpenCV 三,创建一个 Visual Studio 项目 四,配置 Visual Studio 项目 五,编写并编译 OpenCV 程序 六,解决CMake编译OpenCV报的错误 一,环境 Windows 11 家庭中…...

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

React笔记(四)类组件(2)
一、类组件的props属性 组件中的数据,除了组件内部的状态使用state之外,状态也可以来自组件的外部,外部的状态使用类组件实例上另外一个属性来表示props 1、基本的使用 在components下创建UserInfo组件 import React, { Component } from…...
点云从入门到精通技术详解100篇-点云信息编码
目录 前言 研究发展现状 点云几何信息压缩 点云属性信息压缩 点云压缩算法的相关技术...
Python爬虫解析网页内容
Python爬虫是一种自动化程序,可以模拟人类用户访问网页,获取网页中的内容。爬虫在信息采集、数据分析和网络监测等领域有着广泛的应用。在爬虫过程中,解析网页内容是非常重要的一步。 Python提供了许多强大的库和工具,用于解析网…...
从零开始学习Python爬虫技术,并应用于市场竞争情报收集
在当今信息爆炸的时代,市场竞争情报收集对企业的发展至关重要。Python爬虫技术可以帮助我们高效地收集网络上的有价值信息。本文将从零开始介绍Python爬虫技术,并探讨如何将其应用于市场竞争情报收集。 一、Python爬虫技术基础 安装Python环境 首先&…...
SpringCloudGateway集成SpringDoc CORS问题
SpringCloudGateway集成SpringDoc CORS问题 集成SpringDoc后,在gateway在线文档界面,请求具体的服务接口,报CORS问题 Failed to fetch. Possible Reasons: CORS Network Failure URL scheme must be “http” or “https” for CORS reques…...

国际版阿里云/腾讯云:弹性高性能计算E-HPC入门概述
入门概述 本文介绍E-HPC的运用流程,帮助您快速上手运用弹性高性能核算。 下文以创立集群,在集群中安装GROMACS软件并运转水分子算例进行高性能核算为例,介绍弹性高性能核算的运用流程,帮助您快速上手运用弹性高性能核算。运用流程…...
【博客702】shell flock实现单例模式执行任务
shell flock实现单例模式执行任务 场景 我们需要定时执行一个任务,并且保证每次执行时都需要上一次已经执行完了,即保证同一时间只有一个在运行 示例 假设需要执行的脚本是:ping_and_mtr.sh 创建一个新的脚本来运行你的逻辑脚本࿱…...
数据分析基础-数据可视化07-用数据分析讲故事
如何构建⼀个引⼈⼊胜的故事? ⾸先:要想象什么? 可视化什么⽐如何可视化更重要 统计分析:GIGO(垃圾输⼊,垃圾输出) 在可视化分析环境中: 吉⾼ → 您⽆法从可视化的不适当数据中获…...
策略模式简介
概念: 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到独立的类中,使得它们可以互相替换。通过使用策略模式,客户端可以在运行时选择不同的算法来解决…...

学术加油站|基于端到端性能的学习型基数估计器综合测评
编者按 本文系东北大学李俊虎所著,也是「 OceanBase 学术加油站」系列第 11 篇内容。 「李俊虎:东北大学计算机科学与工程学院在读硕士生,课题方向为数据库查询优化,致力于应用 AI 技术改进传统基数估计器,令数据库选…...

MySQL 使用规范 —— 如何建好字段和索引
一、案例背景 二、库表规范 1. 建表相关规范 2. 字段相关规范 3. 索引相关规范 4. 使用相关规范 三、建表语句 三、语句操作 1. 插入操作 2. 查询操作 四、其他配置 1. 监控活动和性能: 2. 连接数查询和配置 本文的宗旨在于通过简单干净实践的方式教会读…...
Relation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning
本文是LLM系列文章,针对《Relation Extraction as Open-book Examination: Retrieval 关系提取作为开卷测试:检索增强提示调整 摘要1 引言2 方法3 实验4 相关工作5 结论 摘要 经过预训练的语言模型通过表现出显著的小样本学习能力,对关系提取…...

FFmpeg报错:Connection to tcp://XXX?timeout=XXX failed: Connection timed out
一、现象 通过FFmpeg(FFmpeg的版本是5.0.3)拉摄像机的rtsp流获取音视频数据,执行命令: ./ffmpeg -timeout 3000000 -i "rtsp://172.16.17.156/stream/video5" 报错: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开发板,主要配置MPC5744P的mcal的每个模块的配置,如要配置NXP的MCU之S32k324的例程请参考: 2 、Base与Resource模块 Base与Resource这两个模块与具体功能无关&…...
Android11编译第二弹:USB连接MTP模式+USB调试+USB信任
一、为什么需要开启USB信任和ADB调试 问题1:原始的AOSP,如果通过USB连接设备以后,会弹窗提示用户选择连接模式:MTP,大容量磁盘,照片等模式; 问题2:USB连接设备以后,需要…...

Unity ShaderGraph教程——基础shader
1.基本贴图shader: 基础贴图实现:主贴图、自发光贴图、光滑度贴图、自发光贴图(自发光还加入了颜色影响和按 钮开关). 步骤:最左侧操作组——新建texture2D——新建sample texture 2D承…...

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

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...