Image 如何在VisualStudio中使用opencv查看图像数据?
我在VS2010中编写了一个OPENCV项目,但结果并不像我预期的那样,所以我运行了调试器来查看问题出在哪里。当我想查看加载的图像中的数据时,我不知道如何操作。如果我想查看图像中的数据,我应该怎么做? 在matlab中,查看图像的不同通道非常简单Image 如何在VisualStudio中使用opencv查看图像数据?,image,visual-studio-2010,debugging,opencv,Image,Visual Studio 2010,Debugging,Opencv,我在VS2010中编写了一个OPENCV项目,但结果并不像我预期的那样,所以我运行了调试器来查看问题出在哪里。当我想查看加载的图像中的数据时,我不知道如何操作。如果我想查看图像中的数据,我应该怎么做? 在matlab中,查看图像的不同通道非常简单 a=imread('test.jpg'); p1 = a(:,:,1) p2 = b(:,:,2) . . 在opencv中,我写了同样的东西,但我不知道如何像Matlab一样一次看到所有元素 a= imread("test.jpg") split
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];
a=imread(“test.jpg”)
分裂(a,平面);
向量T1;
T1=平面[0];
//调试代码时,如何查看T1中的数据?我认为这就是您要寻找的—这是一个很棒的Visual Studio附加组件 只需下载安装程序,确保VS已关闭,运行它,重新打开VS,瞧!现在,当您指向OpenCV数据结构时,会显示各种各样的好信息 局限性:我看到了多通道图像的一些问题(它只显示第一个通道),并且它在显示大型矩阵时也有问题。如果您想在一个大的矩阵中看到原始数据,您可以对调试变量使用旧的good-VS技巧:在断点处停止,转到Watch选项卡,然后在那里写入
((float*)myMat.data) ,10
其中float是矩阵类型,myMat是矩阵,10是要打印的值的数量。它将在myMat.data的内存位置显示前10个值。如果您没有正确选择数据类型,您将看到垃圾。在我的示例中,myMat的类型为cv::Mat
永远不要忘记可视化工具的威力:
imshow("Image", myMat);
如果您的数据适合图像。您可以使用contrib模块的colormap来增强可视化工具。我建议使用扩展。它实际上在预览窗口中显示图像的内容,而不仅仅是格式正确的信息。如果您不想使用Visual Studio的插件或扩展,可以通过键入以下内容在“调试监视”选项卡中逐个访问元素: T1.数据[T1.步骤buf[0]*i+T1.步骤buf[1]*j]
其中i是您要查看的行,j是列。我真不敢相信还没有人提出建议。这是有史以来最棒的插件。它向您显示一个包含所有Mat变量(图像(灰度和颜色)、矩阵)的视图。调试时,还有一些有用的东西,如缩放或对比度拉伸,您甚至可以实时直接在插件中应用更复杂的函数。它可以轻松调试任何类型的图像操作,如果您使用cv::Mat矩阵进行计算和线性代数,它将非常有用
下载imagewatch后,在watch窗口中使用命令 (imagesLoc._Myfirst)[0]
向量中的图像索引您可以使用立即窗口和类似的extenshion方法
/// <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();
}
//
///显示图像
///
公共静态无效显示(此Mat m,Rect Rect=默认值,字符串windowName=“”)
{
if(string.IsNullOrEmpty(windowName))
{
windowName=m.ToString();
}
var img=rect==默认值?m:m.Crop(rect);
双系数=数学最小值(1600d/img.宽度,800d/img.高度);
Cv2.ImShow(windowName,img.Resize(新尺寸(coef*img.Width,(coef*img.Height)>1?coef*img.Height:1));
Cv2.WaitKey();
}
然后在断点处停止并在即时窗口中调用yourImage.Display()。可能的重复:它需要VS2012,所以它不能与VS2010一起工作(OP正在使用的是VS2010,顺便说一句,我也是如此)。如果你没有很好的理由使用VS2010,你无论如何都应该升级,如果不适用于插件,则适用于标准一致性。现在有了VS2013的免费社区版。事实上,我发现NativeViewer适用于VS2010-VS2019版本:只是一个问题-还绘制了实际图像-请参见链接中截图中的橙色和其他水果。opencv可视化工具也这样做吗?因为我正在寻找这个功能,起初我认为opencv可视化工具可以做到这一点,但现在我安装了它,我怀疑它没有,它只是以稍微好一点的方式显示数据。