C# 无法隐式转换';字节[*,*]和#x27;至';字节[*,*,*]';

C# 无法隐式转换';字节[*,*]和#x27;至';字节[*,*,*]';,c#,visual-studio,opencv,emgucv,C#,Visual Studio,Opencv,Emgucv,我正在尝试访问图像的像素数据。我想知道每像素的BGR或HSV值。我还需要弄清楚什么样的价值观最有效。现在我只能访问像素数据了 首先,我尝试将图像转换为正确的格式。我在文档中看到,使用新的Emgu,我需要这样做。然后我想以某种方式访问像素数据,这样我就可以过滤掉白色像素,只查看颜色较深的像素。然后我想确定颜色越深的颜色是什么,并使用该值来估计另一个函数的色调的下限和上限阈值。但这些都是以后的事了。首先,我需要能够访问正确的像素数据,这是错误的。这对我来说是新的,所以我希望有人能告诉我我犯的错误,让

我正在尝试访问图像的像素数据。我想知道每像素的BGR或HSV值。我还需要弄清楚什么样的价值观最有效。现在我只能访问像素数据了

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

这是我的密码

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];
    }
}
如果有人能再帮我一点,那就太好了

编辑

这里不再有错误了。不过,我现在不知道如何访问我的单独数据

        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];
            }
        }
Image img=imgOriginal.ToImage();
矩阵矩阵=新矩阵(imgOriginal.Rows,imgOriginal.Cols);
imgOriginal.CopyTo(矩阵);
字节[,]数据=矩阵数据;
对于(int i=matrix.Rows-1;i>=0;i--)
{
对于(int j=matrix.Cols-1;j>=0;j--)
{
字节B=数据[i,j];
字节G=数据[i,j];
字节R=数据[i,j];
}
}

我刚刚从下载并评估了EmguCV源代码

矩阵的数据定义为

public TDepth[,] Data 
{
    get ...
    set ...
}
这基本上意味着你试图给一个三维变量分配一个二维值,这就是为什么你会得到这个错误


我唯一能建议您继续前进的是阅读EmguCV文档,了解如何使用它们的数据结构。

最后,我需要做的就是将我的
Mat
图像转换为
图像。
然后我可以分别访问像素,并给它们另一个值。这方面的信息就在这里

这是密码

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;
        }
    }
}
Image img=imgTest.ToImage();
对于(int i=img.Rows-1;i>=0;i--)
{
对于(int j=img.Cols-1;j>=0;j--)
{

if(img.Data[i,j,0]这条信息是非常自我解释的:矩阵。数据是一个二维数组,你试图将其视为三维数组。如果你想访问通道,它应该是
matrix
。但是我不知道OpenCV
矩阵
。好吧,我想'byte[,]'表示它是三维的。自从我输入了三个值后,我不知道'矩阵.数据'是二维的,对吗?你最近看到三维矩阵了吗?我已经将
矩阵
更改为
矩阵
。它仍然给出相同的错误。没有额外的错误。我还应该如何创建我的矩阵?好的,谢谢你。我明天会研究这个问题因为我要去上课…耶。我明天会回来的!
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;
        }
    }
}