无法隐式转换' byte [*,*]'到'字节[*,*,*]'

时间:2018-03-27 12:53:23

标签: c# visual-studio opencv emgucv

我正在尝试访问图像的像素数据。我想知道每个像素的BGR或HSV值。我必须弄清楚哪些价值最有效。现在我无法访问像素数据。

首先,我尝试将图像转换为正确的格式。我在文档中读到,我需要使用新的Emgu。然后我想以某种方式访问​​像素数据,这样我就可以过滤掉白色像素,只查看颜色较深的像素。然后我想确定该较暗颜色的颜色是什么,并使用该值来估计另一个函数的Hue的下限和上限阈值。但这一切都是为了以后。首先,我需要能够正确访问像素数据并出错。这对我来说是新的,所以我希望有人可以证明我犯的错误让我了解更多!

这是我的代码

Image<Bgr, Byte> img = imgOriginal.ToImage<Bgr, Byte>();
Matrix<Byte> matrix = new Matrix<Byte>(imgOriginal.Rows, imgOriginal.Cols, imgOriginal.NumberOfChannels);
imgOriginal.CopyTo(matrix);

byte[,,] data = matrix.Data;

for (int i = matrix.Rows - 1; i >= 0; i--)
{
    for (int j = matrix.Cols - 1; j >= 0; j--)
    {
        Byte B = data[i, j, 0];
        Byte G = data[i, j, 1];
        Byte R = data[i, j, 2];
    }
}

我得到的错误如下

Cannot implicitly convert 'byte[*,*]' to 'byte[*,*,*] '

如果有人能帮助我进一步帮助我,那就太棒了!

修改

此处不再有任何错误。我现在不知道如何访问我的单独数据。

        Image<Bgr, Byte> img = imgOriginal.ToImage<Bgr, Byte>();
        Matrix<Byte> matrix = new Matrix<Byte>(imgOriginal.Rows, imgOriginal.Cols);
        imgOriginal.CopyTo(matrix);

        byte[,] data = matrix.Data;

        for (int i = matrix.Rows - 1; i >= 0; i--)
        {
            for (int j = matrix.Cols - 1; j >= 0; j--)
            {
                Byte B = data[i, j];
                Byte G = data[i, j];
                Byte R = data[i, j];
            }
        }

2 个答案:

答案 0 :(得分:0)

我刚刚从https://github.com/emgucv/emgucv下载并评估了EmguCV来源。

矩阵数据定义为

public TDepth[,] Data 
{
    get ...
    set ...
}

这基本上意味着您正在尝试将二维值分配给三维变量,这就是您收到错误的原因。

我建议你进一步推进的唯一方法是阅读EmguCV文档,了解如何使用他们的数据结构。

答案 1 :(得分:0)

最后我需要做的就是将我的Mat图片转换为Image<,>图片。 然后我能够单独访问像素并给它们例如另一个值。这样做的信息就在这里。 http://www.emgu.com/wiki/index.php/Working_with_Images

这是代码

Image<Bgr, Byte> img = imgTest.ToImage<Bgr, Byte>();

for (int i = img.Rows - 1; i >= 0; i--)
{
    for (int j = img.Cols - 1; j >= 0; j--)
    {
        if (img.Data[i, j, 0] <= 100)
        {
            img.Data[i, j, 0] = 255;
        }
    }
}