[英]MS Visual Studio 2012 and OpenCV 2.4.5 - Image is not displayed
[英]How to see image data using opencv in visual studio?
我在 VS2010 中写了一个 OPENCV 项目,结果和我预期的不一样,所以我运行调试器看看问题出在哪里。 当我想查看加载的图像中的数据时,我不知道该怎么做,所以如果我想查看图像中的数据,我应该怎么做? 在matlab中查看图像的不同通道非常简单,即
a=imread('test.jpg');
p1 = a(:,:,1)
p2 = b(:,:,2)
.
.
在 opencv 中,我写了同样的东西,但我不知道如何像 Matlab 一样一次查看所有元素。
a= imread("test.jpg")
split(a,planes);
vector<Mat> T1;
T1 = planes[0];
// 调试代码时如何查看T1里面的数据?
我认为这就是你要找的东西——它是一个很棒的 Visual Studio 插件
https://bitbucket.org/sergiu/opencv-visualizers
只需下载安装程序,确保 VS 已关闭,运行它,重新打开 VS,瞧! 现在,当您指向 OpenCV 数据结构时,会显示各种不错的信息。
限制:我发现多通道图像存在一些问题(它只显示第一个通道),并且在显示大矩阵时也有问题。 如果你想在一个大矩阵中查看原始数据,你可以使用带有调试变量的老式 VS 技巧:停在断点处,转到 Watch 选项卡,然后在那里写
((float*)myMat.data) ,10
其中 float 是矩阵类型, myMat 是您的矩阵, 10 是您要打印的值的数量。 它将在 myMat.data 的内存位置显示前 10 个值。 如果您没有正确选择数据类型,您将看到垃圾。 在我的示例中,myMat 是 cv::Mat 类型。
永远不要忘记可视化工具的力量:
imshow("Image", myMat);
如果您的数据适合图像。 您可以使用 contrib 模块的颜色图来增强您的可视化工具。
我真的不敢相信还没有人建议使用Image Watch 。 这是有史以来最神奇的插件。 它会在调试时向您显示包含所有 Mat 变量(图像(灰度和颜色)、矩阵)的视图,还有一些有用的东西,例如缩放或对比度拉伸,您甚至可以直接在插件中实时应用更复杂的功能。 它使调试任何类型的图像操作变得轻而易举,如果您使用 cv::Mat 矩阵进行计算和线性代数,它会非常有帮助。
我建议使用NativeViewer扩展。 它实际上在预览窗口中显示图像的内容,而不仅仅是格式正确的信息。
如果您不想使用 Visual Studio 的插件或扩展,您可以通过键入以下内容在调试监视选项卡中一一访问元素:
T1.data[T1.step.buf[0]*i + T1.step.buf[1]*j];
其中 i 是您要查看的行,j 是列。
下载 imagewatch 后使用观察窗口中的命令 (imagesLoc._Myfirst)[0]
向量中图像的索引
您可以像这样使用立即窗口和扩展方法
/// <summary>
/// Displays image
/// </summary>
public static void Display (this Mat m, Rect rect = default, string windowName = "")
{
if (string.IsNullOrEmpty(windowName))
{
windowName = m.ToString();
}
var img = rect == default ? m : m.Crop(rect);
double coef = Math.Min(1600d / img.Width, 800d / img.Height);
Cv2.ImShow(windowName, img.Resize(new Size(coef * img.Width, (coef * img.Height) > 1 ? coef * img.Height : 1)));
Cv2.WaitKey();
}
然后在断点处停止并在即时窗口中调用 yourImage.Display() 。
如果您可以使用 CLion,您可以使用 OpenCV 图像查看器插件,该插件在调试时只需单击即可显示矩阵。
https://plugins.jetbrains.com/plugin/14371-opencv-image-viewer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.