【发布时间】:2018-12-02 10:32:32
【问题描述】:
我正在尝试从名为btm 的图像中获取最大强度值和最小强度,以从“最大、最小”中获取平均值,然后使用该平均值作为阈值将图像转换为二值图像。
所以我使用了来自 aforge 库的直方图类,它接受一个 int 数组,所以我试图将我的图像 btm 转换为数组,但是我用来将图像返回数组从字节数据类型转换的函数 ImageToByteArray。
System.Drawing.Image img = (System.Drawing.Image)btm;
byte[] imgarr = ImageToByteArray(img);
Histogram h = new Histogram(imgarr);
int Maxval= h.max();
int Minval= h.min();
.
public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms, imageIn.RawFormat);
return ms.ToArray();
}
}
【问题讨论】:
-
您确实意识到 实际 平均值与从 max 和 min 获得的平均值不同,对吧? (
{0, 99, 100}的平均值是66,而不是50)。 -
由于我们看不到您的图像是什么,一个简单的选择是将图像转换为灰度并将阈值设置为 (255-0)/2 = ~ 127。您可以将此值移动到两边有点找到你要找的东西。如果您能提及您需要二进制图像的应用程序,那就更好了
-
Aforge 的 Histogram 类不是处理图像的东西;它只处理一系列值。您将直方图应用于已保存文件中的字节,它与实际图像数据没有任何关系。另外,定义“强度”。如果你有一种颜色,它的“强度”是多少?
-
请注意,
RawFormat仅表示“无论原始加载的文件保存在什么位置”。它并不意味着“代表原始图像数据的字节”。
标签: c# image-processing aforge