如何使用 MFC 将 24 位彩色图像转换为二进制图像?
Posted
技术标签:
【中文标题】如何使用 MFC 将 24 位彩色图像转换为二进制图像?【英文标题】:How do I convert a 24-bit colour image to binary image using MFC? 【发布时间】:2010-06-26 08:34:19 【问题描述】:如何将位图图像转换为二进制图像?
【问题讨论】:
位图已经是二进制图像。此外,您可能想指定您当前使用的平台/语言,因为您的问题没有意义。 您的意思是真正的位图,还是仅仅指 BMP 或其他图像?如果有,是彩色还是灰度? 我正在使用 c++ MFC。我的意思是 24 位位图。它是色阶的,我可以将其转换为灰度。 【参考方案1】:将灰度图像转换为二值图像的最简单和最简单的方法是只应用一个阈值,即
out[y][x] = in[y][x] > threshold ? 1 : 0;
threshold
值可以固定,例如128,可变,由用户提供,或通过先对图像进行直方图自动确定。
有更复杂的方法可以生成主观上“更好”的二值图像,但如果不了解您的需求,就很难知道您是否需要更高级的东西,或者简单的阈值处理是否足够好。
【讨论】:
我试过了,但它只是打印一个黑色方块:(这是我的代码请检查一下。COLORREF rgb = dc.GetPixel(x, y); BYTE r = GetRValue(rgb); BYTE g = GetGValue(rgb); BYTE b = GetBValue(rgb); BYTE bw = (BYTE)(0.3 * r + 0.59 * g + 0.11 * b + 0.5); BYTE bin = RGB(bw,bw,bw) > 128 ? 1: 0; dc.SetPixel(x,y,RGB(bin,bin,bin)); @Sweety Khan:可能你的阈值对于这张图片来说太高了——试试较低的值。另请注意,如果您的图像仍然是 8 位,值为 1 和 0,那么它将不可见 - 对于 8 位图像,您需要使用 0 和 255。 我使用的彩色图像是24位位图。 所以有没有可能?我尝试了较小的值,但它仍然显示一个黑色方块 我已经更改了这些行。字节 bin = bw > 175 ? 255: 0;dc.SetPixel(x,y,RGB(bin,bin,bin));不太好,但它完成了!非常感谢你,保罗 :)以上是关于如何使用 MFC 将 24 位彩色图像转换为二进制图像?的主要内容,如果未能解决你的问题,请参考以下文章
图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)