迭代 EmguCV 中 Mat 的每个像素
Iterate over each pixel of Mat in EmguCV
我想使用 C# 将值分配给 EmguCV 中 Mat 的每个像素。我已阅读文档,但没有找到任何方法来执行此操作。我可以用 Image
做到这一点,但我想用 Mat
做到这一点。所以,谁能告诉我怎么做。
在 EmguCV 中,您可以使用 Data
方法获取每个像素的值,但根据文档中的说明,您无法重新分配它。
我从你的问题中了解到,你想把每个像素的颜色值放到Mat
class的变量中。如果这是问题所在,您可以看到下面的代码对我来说是完美的。
Byte[,,] color = new Byte[256, 1, 3];
int i = 0;
for (double x = 0; x < palette.Rows;)
{
color[i, 0, 0] = palette.Data[(int)x, palette.Width / 2, 0];
color[i, 0, 1] = palette.Data[(int)x, palette.Width / 2, 1];
color[i, 0, 2] = palette.Data[(int)x, palette.Width / 2, 2];
i++;
x = x + 3.109;
}
Mat lut = new Mat(256, 1, DepthType.Cv8U, 3);
lut.SetTo(color);
我在使用任何调色板对图像进行伪着色时都使用了这种方法。我创建了一个 3 维数组并使用 Mat
class 的 SetTo
方法,我刚刚将该数组分配给 Mat
。希望对您有所帮助。
我想使用 C# 将值分配给 EmguCV 中 Mat 的每个像素。我已阅读文档,但没有找到任何方法来执行此操作。我可以用 Image
做到这一点,但我想用 Mat
做到这一点。所以,谁能告诉我怎么做。
在 EmguCV 中,您可以使用 Data
方法获取每个像素的值,但根据文档中的说明,您无法重新分配它。
我从你的问题中了解到,你想把每个像素的颜色值放到Mat
class的变量中。如果这是问题所在,您可以看到下面的代码对我来说是完美的。
Byte[,,] color = new Byte[256, 1, 3];
int i = 0;
for (double x = 0; x < palette.Rows;)
{
color[i, 0, 0] = palette.Data[(int)x, palette.Width / 2, 0];
color[i, 0, 1] = palette.Data[(int)x, palette.Width / 2, 1];
color[i, 0, 2] = palette.Data[(int)x, palette.Width / 2, 2];
i++;
x = x + 3.109;
}
Mat lut = new Mat(256, 1, DepthType.Cv8U, 3);
lut.SetTo(color);
我在使用任何调色板对图像进行伪着色时都使用了这种方法。我创建了一个 3 维数组并使用 Mat
class 的 SetTo
方法,我刚刚将该数组分配给 Mat
。希望对您有所帮助。