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