用 Visual Studio 调试器中查看内存中图像

news2024/12/23 14:27:13

返回目录:OpenCV系列文章目录(持续更新中......)

前一篇:OpenCV4.9.0在windows系统下的安装

后一篇:  

​警告

本教程可以包含过时的信息。

Image Watch 是 Microsoft Visual Studio 的插件,可用于在调试应用程序时可视化内存中的图像(例如 cv::Mat 或 IplImage_ 对象)这有助于跟踪错误,或者简单地了解给定的代码段正在做什么

先决条件

本教程假定您具备以下条件:

  1. 安装了 Update 1 的Visual Studio 2012 Professional(或更高版本)。更新1可在此处下载。
  2. 在Windows计算机上安装OpenCV(教程:在 Windows 中安装)
  3. 能够在Visual Studio中创建和构建OpenCV项目(教程:如何在“Microsoft Visual Studio”中使用OpenCV构建应用程序)

安装

下载 Image Watch 安装程序。(Visual Studio 2019 |Visual Studio 2017 中文版 |Visual Studio 2012、2013、2015)安装程序位于扩展名为 .vsix(Visual Studio 扩展)的单个文件中。要启动它,只需双击Windows资源管理器中的 .vsix 文件。安装程序完成后,请确保重新启动 Visual Studio 以完成安装

例:

Image Watch适用于使用 OpenCV 图像对象(例如,cv::Mat)的任何现有项目。在此示例中,我们使用一个最小的测试程序,该程序从文件加载图像并运行边缘检测器。若要生成程序,请在 Visual Studio 中创建一个控制台应用程序项目,将其命名为“image-watch-demo”,并在下面插入源代码

​// Test application for the Visual Studio Image Watch Debugger extension
#include <iostream> // std::cout
#include <opencv2/core/core.hpp> // cv::Mat
#include <opencv2/imgcodecs/imgcodecs.hpp> // cv::imread()
#include <opencv2/imgproc/imgproc.hpp> // cv::Canny()
using namespace std;
using namespace cv;
void help()
{
cout
<< "----------------------------------------------------" << endl
<< "This is a test program for the Image Watch Debugger " << endl
<< "plug-in for Visual Studio. The program loads an " << endl
<< "image from a file and runs the Canny edge detector. " << endl
<< "No output is displayed or written to disk."
<< endl
<< "Usage:" << endl
<< "image-watch-demo inputimage" << endl
<< "----------------------------------------------------" << endl
<< endl;
}
int main(int argc, char *argv[])
{
help();
if (argc != 2)
{
cout << "Wrong number of parameters" << endl;
return -1;
}
cout << "Loading input image: " << argv[1] << endl;
Mat input;
input = imread(argv[1], IMREAD_COLOR);
cout << "Detecting edges in input image" << endl;
Mat edges;
Canny(input, edges, 10, 100);
return 0;
}

确保活动解决方案配置(内部版本 –> Configuration Manager)设置为调试版本(通常称为“调试”)。这应该会禁用编译器优化,以便调试器中的查看变量可以可靠地工作

生成解决方案(“生成 >生成解决方案”,或按 F7

在继续之前,不要忘记将输入图像的命令行参数添加到项目中(右键单击项目 –> 属性 –> 配置属性 –>调试,然后使用图像的位置设置字段命令参数)

现在在源行上设置一个断点,上面写着Mat edges;

若要设置断点,请右键单击源行,然后从上下文菜单中选择“断点 –>插入断点”

在调试器中启动程序(Debug –> Start Debugging,或按 F5)。命中断点时,程序将暂停,Visual Studio 会在断点处显示黄色指令指针:

breakpoint.png

现在,您可以检查程序的状态。例如,您可以打开“局部变量”窗口(“调试”>“Windows ”–“>局部变量”),该窗口将显示当前作用域中变量的名称和值:

vs_locals.png

​请注意,内置的“局部变量”窗口将仅显示文本。这就是 Image Watch 插件的用武之地。Image Watch 就像另一个 Locals 窗口,但内置了一个图像查看器。若要调出“图像监视”,请选择“视图”->“其他窗口”->“图像监视”。与 Visual Studio 的“局部变量”窗口一样,Image Watch 可以停靠到 Visual Studio IDE。此外,Visual Studio 还会记住你是否打开了图像监视,以及它在调试会话之间的位置。这意味着您只需执行一次此操作 - 下次开始调试时,Image Watch 将返回到您离开的位置。下面是停靠的 Image Watch 窗口在断点处的样子:

toolwindow.jpg

左上角的单选按钮 (Locals/Watch) 选择下面的图像列表中显示的内容:Locals 列出当前范围内的所有 OpenCV 图像对象(此列表会自动填充)。监视显示已固定以进行连续检查的图像表达式(此处未介绍,有关详细信息,请参阅图像监视文档)。图像列表显示基本信息,例如宽度、高度、通道数以及缩略图(如果可用)。在我们的示例中,图像列表包含我们的两个局部图像变量,即输入边缘

如果图像有缩略图,左键单击该图像将在右侧的图像查看器中选择该图像进行详细查看。查看器允许您平移(拖动鼠标)和缩放(鼠标滚轮)。它还显示当前鼠标位置的像素坐标和值。

viewer.jpg

请注意,列表中的第二张图像“边缘”显示为“无效”。这表示此图像对象的某些数据成员具有损坏或无效的值(例如,负图像宽度)。这在程序的这一点上是预期的,因为边缘的C++构造函数尚未运行,因此其成员具有未定义的值(在调试模式下,它们通常填充“0xCD”字节)。

从这里,您可以单步执行代码(Debug->Step Over,或按 F10)并观察像素变化:如果单步执行一次,则 Mat edges; 语句,边缘图像将从“invalid”变为“empty”,这意味着它现在处于有效状态(默认构造),即使它尚未初始化(使用 cv::例如,Mat::create())。如果在 cv::Canny() 调用上再执行一步,您将看到边缘图像的缩略图出现在图像列表中。

现在假设你想对 cv::Canny() 实现进行可视化健全性检查。通过在“图像列表”中选择边缘图像,将边缘图像带入查看器,并放大到具有明确定义边缘的区域:

edges_zoom.png

右键单击图像查看器以调出视图上下文菜单并启用链接视图(菜单项旁边的复选框指示是否启用该选项)。

viewer_context_menu.png

“链接视图”功能在相同大小的图像之间切换时使视图区域保持固定。要查看其工作原理,请从图像列表中选择输入图像 - 您现在应该在输入图像中看到相应的放大区域:

input_zoom.png

​您还可以使用向上/向下光标键在查看输入和边缘之间来回切换。这样,您就可以轻松验证检测到的边缘是否与输入图像中的数据很好地对齐。

更多 ...

Image Watch 具有许多更高级的功能,例如

  1. 将映像固定到监视列表,以便跨作用域或调试会话之间进行检查
  2. 直接在“监视”窗口内对图像进行钳位、阈值设置或差异
  3. 将内存中映像与文件中的参考映像进行比较

有关详细信息,请参阅在线图像监视文档 - 您也可以通过单击图像监视窗口中的帮助链接访问文档页面:

help_button.jpg

 参考文献: 

《Image Watch: viewing in-memory images in the Visual Studio debugger 》Wolf Kienzle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)

提供在给定范围内选择评分的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rating(options?: { rating: number, indicator?: boolean }) 从API version 9开始&#…

linux源配置:ubuntu、centos

1、ubuntu源配置 1&#xff09;先查电脑版本型号: lsb_release -c2&#xff09;再编辑源更新&#xff0c;源要与上面型号对应 参考&#xff1a;https://midoq.github.io/2022/05/30/Ubuntu20-04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E9%95%9C%E5%83%8F%E6%BA%90/ /etc/apt/…

海外直播带货对直播网络的要求

海外直播带货已成为电商领域的热门趋势&#xff0c;吸引了越来越多的品牌和商家参与。然而&#xff0c;要实现成功的海外直播带货&#xff0c;稳定、高效的直播网络是至关重要的。以下是海外直播带货对直播网络的主要要求&#xff1a; 1、稳定的网络连接&#xff1a; 海外直播带…

业务场景解析——如何执行重要的批次任务

业务场景解析之——如何执行批次重要的任务 前言一、流程时序二、并发设计 前言 这次业务场景上需要跑一批任务识别任务&#xff0c;而每个具体任务识别都比较重要&#xff0c;需要调用外部接口进行计费&#xff0c;而量又比较大&#xff0c;这就要求这个任务是比较稳定安全的。…

macbook删除软件只需几次点击即可彻底完成?macbook删除软件没有叉 苹果笔记本MacBook电脑怎么卸载软件? cleanmymac x怎么卸载

在MacBook的使用过程中&#xff0c;软件安装和卸载是我们经常需要进行的操作。然而&#xff0c;不少用户在尝试删除不再需要的软件时&#xff0c;常常发现这个过程既复杂又耗时。尽管MacOS提供了一些基本的macbook删除软件方法&#xff0c;但很多时候这些方法并不能彻底卸载软件…

实验室管理系统 |基于springboot框架+ Mysql+JSP技术+Tomcat的实验室管理系统 设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 用户后台功能模块 用户后台管理 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunw…

怎么利用视频截取gif?三步在线转换gif

在当今的社交媒体和网络世界中&#xff0c;GIF图像已经成为了一种非常受欢迎的表达方式。它们以简洁、循环播放的形式&#xff0c;能够生动地展示一系列图像的变化。你可能好奇&#xff0c;如何从视频中提取GIF图呢&#xff1f;很简单&#xff0c;使用视频转gif工具手机、pc均可…

爱发电开发者Webhook URL如何配置并且成功返回响应

Webhook URL 爱发电提供了webhook和api两种方式为开发者提供便利。 webhook功能需要配置好url&#xff0c;每当有订单时&#xff0c;会请求配置的url&#xff1b;API功能需要开发者通过token生成sign签名&#xff0c;主动请求接口查询历史订单 Webhook URL&#xff08;用来被…

pta-猜帽子游戏

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子&#xff0c;有的是黑色的&#xff0c;有的是黄色的。每个人可以看到别人头上的帽子&#xff0c;但是看不到自己的。游戏开始后&#xff0c;每个人可以猜自己头上的帽子是什么颜色&#xff0c;或者可以弃权不猜。如果没有…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Row)

沿水平方向布局容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Row(value?:{space?: number | string }) 从API version 9开始&#xff0c;该接口支持在…

Rust写一个wasm入门并在rspack和vite项目中使用(一)

rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包&#xff0c;然后解压到用户/.cargo/bind目录下&#xff0c;将解压后的文件放到该目录下即可。 创建wasm项目 …

Microsoft Word 符号 / 特殊符号

Microsoft Word 符号 / 特殊符号 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2References 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

VLC抓取m3u8视频

前言 最近想看一些网络视频&#xff0c;但是很多时候网页上是m3u8推流的&#xff0c;如果在线看&#xff0c;速度又慢&#xff0c;所以就想下载下来&#xff0c;就想到了VLC的推流&#xff0c;转换能力&#xff0c;查阅资料&#xff0c;加上实践&#xff0c;总结心得。 设置中…

腾讯云2核4g服务器能支持多少人访问?2C4G并发数性能测评

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

如何在iPhone上恢复已删除的微信聊天记录?

你好&#xff0c;我前几天删除了微信聊天记录。有什么办法可以恢复iPhone上已删除的微信聊天记录吗&#xff1f; 有些人每次使用设备时都会遇到在 iPhone 上丢失消息的风险。特别是&#xff0c;由于多种因素&#xff0c;可能会丢失第三方数据&#xff0c;微信消息也是如此。微…

一瓶5.86万,听花酒什么来头?

听花酒&#xff0c;到底什么来头&#xff1f; 宣称有提升免疫力、改善睡眠、保障男性功能、调节生理紊乱、抗衰老等功效的听花酒&#xff0c;被315晚会曝光了。 相关话题词随即冲上了热搜。之后&#xff0c;售价最高达58600元的听花酒被京东、拼多多、淘宝等电商平台火速下架…

AcWing.505 火柴排队(离散化逆序对)

题目 涵涵有两盒火柴&#xff0c;每盒装有 n  根火柴&#xff0c;每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列&#xff0c;同一列火柴的高度互不相同&#xff0c;两列火柴之间的距离定义为&#xff1a; ∑i1n(ai−bi)2 其中 ai表示第一列火柴中第 i个火柴的…

计算机通识——01.进制转换

前言 学习资料来自 C训练以及CSDN各博主的博客整合而来&#xff0c;内容涵盖计算机通识内容&#xff1a;进制转换、信息单位、数据校验、多媒体基础参数、HTTP \ HTTPS协议、OSI七层模型、IP基础 \ IPv6、网络拓扑机构、域名解析、常用网络命令和端口、数据结构常识等内容&…

【软考高项】七、信息技术发展之存储、数据库、信息安全

1、存储知识点 存储类型分&#xff1a;封闭式&#xff08;小型机&#xff09;和开放式&#xff08;服务器&#xff09; 其中开放式又分内置和外挂存储&#xff08;直连DAS、网格FAS&#xff08;NAS/SAN&#xff09;&#xff09; 2、数据库知识点 数据结构模型&#xff1a; …

面向对象(C# )

面向对象&#xff08;C# &#xff09; 文章目录 面向对象&#xff08;C# &#xff09;ref 和 out传值调用和引用调用ref 和 out 的使用ref 和 out 的区别 结构体垃圾回收GC封装成员属性索引器静态成员静态类静态构造函数拓展方法运算符重载内部类和分布类 继承里氏替换继承中的…