2

我在 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里面的数据?

4

7 回答 7

6

我认为这就是您正在寻找的 - 这是一个很棒的 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 模块的颜色图来增强您的可视化工具。

于 2012-08-14T09:01:12.310 回答
5

我真的不敢相信还没有人建议Image Watch。这是有史以来最神奇的插件。它在调试时向您显示包含所有 Mat 变量(图像(灰色和颜色)、矩阵)的视图,其中包含缩放或对比度拉伸等有用的东西,您甚至可以直接在插件中实时应用更复杂的功能。它使任何类型的图像操作的调试变得轻而易举,如果您使用 cv::Mat 矩阵进行计算和线性代数,它会非常有帮助。

在此处输入图像描述

于 2014-06-13T00:45:03.080 回答
0

下载 imagewatch 后使用监视窗口中的命令 (imagesLoc._Myfirst)[0]

向量中图像的索引

于 2014-11-26T15:11:50.410 回答
0

如果您不想使用 Visual Studio 的插件或扩展,可以通过键入以下内容在调试监视选项卡中逐个访问元素:

T1.data[T1.step.buf[0]*i + T1.step.buf[1]*j];

其中 i 是您要查看的行, j 是列。

于 2014-01-15T15:39:39.937 回答
0

我建议使用NativeViewer扩展。它实际上在预览窗口中显示图像的内容,而不仅仅是格式正确的信息。

于 2012-12-04T09:30:59.857 回答
0

You can use the immediate window and the extenshion method like this one

    /// <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();
    }

Then you stop at a breakpoint and call yourImage.Display() in the immediate window.

于 2020-08-30T08:21:11.093 回答
0

如果您可以使用 CLion,则可以使用 OpenCV Image Viewer 插件,该插件在单击调试时显示矩阵。

https://plugins.jetbrains.com/plugin/14371-opencv-image-viewer

在此处输入图像描述

于 2021-08-14T19:22:08.277 回答