视觉处理图像(调试)时,如何查看图像的处理情况和内部结构?---Image Watch的使用。

1、干啥用的

这个Image Watch(图像查看器)是一个与VS相结合的插件,专门用来查看Mat类的数据内部结构的,而不必要使用cout对图像数据的矩阵进行打印出来。

2、Image Watch的安装

在百度中输入image watch 我们呢选择Visual studio Markeplace 点击进入后可以进入到下载界面。

这个插件是vs官方提供的,下载后进行安装,最好此时关掉VS。

也许你下载了一个...但是安装不上,原因是Image Watch是与vs版本有对应关系的(例如我使用的是vs2017)。在Visual Studio的Marketplace中可以找到对应的ImageWatch版本。

3、Image Watch的使用

在vs中的“视图”  -》 “其它窗口"  找到安装好的Image Watch,你给我狠狠的把它点出来。

注意:你如果想查看一个图像的Mat数据的内部结构,在使用ImageWatch之前你得让你的调试过程停在哪,也就是你得设置断点,然后再查看执行结果。否则的话,ImageWatch啥也看不着。

4、实战代码,教你偷窥图像的内部世界:   (看到最后)

注意:你设置断点所在的行是不执行的,只执行到断点之前的那一行。另外断点变成黄色箭头就会表示马上执行这个黄色的箭头这行的代码(当前还未执行)。所以你查看图像数据时你得保证,执行了。

我在第一句代码执行之前就设置了执行断点,但是此时我依然能够使用image wathc去查看变量的内容(只不过查看的是空的Mat),因为在编译之前已经进行过了预编译。

#include<iostream>

#include<opencv2/opencv.hpp>//使用这个大的头文件可以将所有的opencv的头文件全都包含进去

using namespace std;

using namespace cv;

int main()

{

//创建一个Mat类,并读取图片数据

Mat b_img;//在此处设置一个端点,用于理解代码运行逻辑。

Mat a = (cv::Mat_<int>(3, 3) << 1,2,3,4,5,6,7,8,9);//利用枚举法创建一个单通道的Mat

b_img = imread("C:\\Users\\神匠\\Desktop\\lena.jpeg", IMREAD_COLOR);//以彩色方式读取

Mat gray = imread("C:\\Users\\17266\\Desktop\\lena.png", IMREAD_GRAYSCALE);//以灰度方式

                                                                                                                                      读取

return 0;
}
思路起飞

我们将查看的图像矩阵的尺寸使用滚轮放大后,我们将鼠标放置在Mat的某个元素上,在ImageWatch的左上角会出现两组数字,第一组是这个元素的列+行的信息,是以0为基数的。第二组数据是当前元素的信息:如果是灰度图单通道的,显示的是灰度值。如果是3通道的,显示的是BGR值。矩阵图像可以放大和缩小也可以水平拖动。在watch窗口的右上角也有一组数据,是像素在当前视窗下的放大或缩小倍数,原图的大小就是1.00x.

当我们的图像以显示矩阵的形式被无限放大后其实也可以看到上边的这些像素点上有信息,比如3通道的上边显示的就是当前像素的RGB值(宏观视角转换成微观视角了)。

当滑动滚轮,Mat矩阵被缩小后,我们看到了图片全景但是看不到这些通道下的信息值了(微观视角转换为宏观视角了)。

小结:所有的元素(像素)它只有唯一的一个颜色,纵然这个颜色是一个BGR值。它也是一个单一的像素的值。

  • 当运行到第一行的断点时,显示的三个mat变量中的属性都是invalid,但是运行完第一句后,b_img的属性就发生变化了,它不再是无效的而是noinit 表示未进行初始化。
  • 使用逐过程,执行下一句(非逐语句),我们发现当a被赋值后它的行列信息中显示的是3X3,而它的数据信息中显示1xINT32 这表示是1通道的,是整形int类型数据的。当我们在Image Watch的信息栏点击这个a的时候右边就出现了像素矩阵是一个3x3的,但是里边这9个像素都是白的,将右边的矩阵使用滚轮儿放大后我们发现矩阵中是有数字的分别每个格子是1到9的数值。
  • 继续逐过程执行,当b_image被初始化后,它显示了lena的Mat矩阵信息为 532x528 其数据信息显示为3xUINT8表示3通道的无符号整形。
  • 继续逐过程执行,当gray这个mat变量被赋值时我们发现矩阵的行列信息与b_image是一样的,但是它是1xUINT8也就是说它灰度显示的时候是单通道的mat。
  • 当我们的程序调试完毕后,vs会对资源进行清除,此时Image Watch中就不再有显示了

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VS2017 Image Watch是一个Visual Studio扩展,用于在调试过程中查看图像数据。它可以显示Mat、Array和Bitmap等常见的图像格式。使用Image Watch,开发人员可以在调试直观地查看图像数据,比如查看图像的像素值、大小和通道等。 VS2017 Image Watch使用非常简单。首先,我们需要确保已安装Visual Studio 2017,并在调试过程中加载了图像数据。然后,通过在调试过程中选中某个图像变量,我们可以右键单击并选择“Image Watch”菜单。这将打开一个新的窗口,显示选中图像的详细信息和图像预览。 在Image Watch窗口中,我们可以看到图像的像素值和通道信息。通过鼠标滚轮或放大缩小按钮,我们可以调整图像的显示大小。此外,还可以选择在特定的区域绘制ROI(感兴趣区域),并查看该区域的像素值。 除了查看图像数据,Image Watch还提供了一些附加功能。例如,我们可以将当前显示的图像保存为文件,以便后续使用。还可以在Image Watch窗口中比较不同的图像变量,以便比较它们之间的差异。 总的来说,VS2017 Image Watch是一个非常有用的工具,它使开发人员能够在调试过程中直观地查看和分析图像数据。通过快速了解图像的像素值和区域特征,开发人员可以更有效地调试和优化他们的图像处理算法。这个扩展在图像处理和计算机视觉领域的开发工作中非常实用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神 匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值