我正在尝试访问图像的像素数据。我想知道每个像素的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];
}
}
答案 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;
}
}
}