【配置环境】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/* 函数结果…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...






