Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何在VisualStudio中使用opencv查看图像数据?_Image_Visual Studio 2010_Debugging_Opencv - Fatal编程技术网

Image 如何在VisualStudio中使用opencv查看图像数据?

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

我在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];  
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可视化工具可以做到这一点,但现在我安装了它,我怀疑它没有,它只是以稍微好一点的方式显示数据。