1.下载地址
2. 原文地址
Image Watch: viewing in-memory images in the Visual Studio debugger
3.翻译及学习实践
Image Watch:在vs 调试内存中观察图像
Image Watch 是visual studio的一个插件,通过该插件可以在调试阶段在内存中可视化的观察图像。这对寻找bug十分有效,或者理解代码在执行哪些部分。
使用前提
1. visual stuidio 2012及以上版本
2. opencv已经在你的电脑上配置好,
opencv下载安装教程
3. 可以在visual studio中配置开发opencv项目,
配置教程
安装
下载Image Watch安装包,以.vsix结尾,双击安装,之后重启visual stuiio 即可。
使用案例
Image Watch在OpenCV项目中调用。在这个例子中,我们载入一张图片如下所示,运行边缘检测程序。新建一个项目文件“image-watch-demo”,插入以下代码:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
Mat image;
// read the input image as a gray-scale image
image = cv::imread("bd1.jpg", 1);
if (image.empty()) { // error handling
// no image has been created...
// possibly display an error message
// and quit the application
cout << "Error reading image..." << std::endl;
return 0;
}
cout << "This image is " << image.rows << " x "
<< image.cols << std::endl;
cout << "This image has "
<< image.channels() << " channel(s)" << std::endl;
// create image window named "My Image"
namedWindow("Original Image"); // define the window (optional)
imshow("Original Image", image); // show the image
waitKey(0); // 0 to indefinitely wait for a key pressed
// specifying a positive value will wait for
Mat edgeimage;
Canny(image, edgeimage, 10, 100);
namedWindow("Edged Image");
imshow("Edged Image", edgeimage);
waitKey(0);
return 0;
}
确保在Debug模式下调试,这样禁止编译器优化,调试更加可靠。
Build项目,运行结果如下:
关闭运行结果,现在在下面代码打上断点,
Mat edgeimage;
启动调试,或按F5.当运行到断点处,程序停止,有个黄色的箭头指示:
现在你可以查看项目的状态。例如,你可以查看局部变量(Debug--Windows--Locals)
注意到局部变量只呈现文字信息,这时Image Watch就派上用场了,Image Watch就像另一个局部变量窗口,但是是用图像的方式呈现。选择View--OtherWindows--Image Watch打开Image Watch或者点击上图中右侧的放大镜也可以打开Image Watch,像其他窗口一样,Image Watch 也可以嵌入到IDE的窗口中,并且visual studio会记住你的操作,只用打开一次,下次debug会自动打开Image Watch 窗口。
上部的单选按钮选择显示那种图片列表:Locals 列出项目范围中所有的图片(自动实现的),Watch 显示加入观察的图像,在Local列表里图像上点击右键,Add to Watch.
图像列表显示基本的信息例如宽度高度,通道,甚至缩略图。点击图片,在右侧会显示其详细信息。你可以鼠标拖动或者缩放图像。在上册显示鼠标的位置及该位置的像素值,
鼠标滚轮放大,不断放大,你会发现新世界,所有像素上的值都会显示出来,如下图。
目前为止,边缘检测的图像是无效的,这表明程序有错误或者没有运行,例如错误的宽度等,在调试中图像无效对调试寻找问题很有用处。从此处可以运行单步调试,Debug--StepOver或按F10,观察像素的变化,你会发现每运行一步,图像会有所变化,从无效变成有图像显示。
现在假设你想检查边缘检测的效果,选中边缘效果图,并进行放大,然后在图像上右键选择 Link Views,此时两幅图像关联起来,在任意图像上选择任意位置视图,在另一张图中同样位置的变化就会显示。你可以在两张图中切换,找到对应位置的变化。