【发布时间】:2018-09-05 21:26:59
【问题描述】:
我正在尝试访问我的图像的像素数据。我想知道每个像素的 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];
}
}
我得到的错误如下
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];
}
}
【问题讨论】:
-
该消息非常不言自明:matrix.Data 是一个二维数组,您正试图将其视为三维数组。
-
如果你想访问频道,应该是
Matrix<Bgr>。但是我对 OpenCVMatrix不太了解。 -
好吧,我认为 'byte[,,]' 意味着它是三维的。我没有看到“matrix.Data”是二维的,因为我输入了三个值,对吗?
-
你最近见过 3D 矩阵吗?
-
我已将
Matrix<Byte>更改为Matrix<Bgr>。它仍然给出同样的错误。没有额外的错误。我还应该如何创建矩阵?
标签: c# visual-studio opencv emgucv