如何使用MFC将24位彩色图像转换为二进制图像?

问题描述:

如何转换二进制图像中的位图图像?如何使用MFC将24位彩色图像转换为二进制图像?

+4

位图已经是二进制图像。你也可能想指定你使用的平台/语言,因为目前你的问题没有意义。 – 2010-06-26 08:36:37

+0

你真的是指一个位图,或者你只是指一个BMP或其他图像?如果是这样,是彩色还是灰度? – 2010-06-26 08:42:19

+0

我正在使用C++ MFC。我的意思是24位位图。它在色阶中,我可以将它转换成灰阶。 – 2010-06-26 08:52:53

到灰度图像转换为二进制图像是只应用阈值的最简单的和最简单的方法,即

out[y][x] = in[y][x] > threshold ? 1 : 0; 

threshold值可以是固定的,例如128,变量,由用户提供,或通过首先对图像进行直方图自动确定。

有更复杂的方法会产生主观“更好”的二值图像,但不知道更多关于您的要求,很难知道您是否需要更先进的东西或简单的阈值是否足够好。

+0

我试图,但它只是打印黑色正方形:(这是我的代码PLZ检查此COLORREF RGB = dc.GetPixel(X,Y); \t \t字节R = GetRValue(RGB); \t \t BYTE克= GetGValue(RGB); \t \t BYTE b = GetBValue(RGB); \t \t BYTE BW =(BYTE)(0.3 * R + 0.59 * G + 0.11 * b + 0.5); \t \t BYTE仓= RGB(BW ,bw,bw)> 128?1:0; \t \t dc.SetPixel(x,y,RGB(bin,bin,bin)); – 2010-06-26 10:17:32

+0

@Sweety Khan:可能您的阈值对于此图像来说太高 - 尝试较低的价值e如果你的图像仍然是8位,值为1和0,那么它将不可见 - 你需要使用0和255作为8位图像。 – 2010-06-26 15:52:22

+0

我使用的彩色图像是24位位图。 – 2010-06-26 17:14:40