如何检测位图中的像素是否为黑色

时间:2016-03-08 00:33:16

标签: c# visual-studio-2013

我正在制作一个程序,我需要知道如何查看位图图像中的像素是非常暗还是黑。非常感谢您的帮助。

//need help
if (_Bitmap.GetPixel(c, d, Color.FromArgb(255) == 255)) mouse_event((int)Test.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
//need help

2 个答案:

答案 0 :(得分:4)

为了获得像素的颜色,您应该使用GetPixel方法。 你可以使用Color类的GetBrightness方法来获得亮度并检查"多么黑暗"是颜色。 纯黑色的亮度等于0,最大值为1.

因此,您可以将亮度与某个阈值进行比较,例如0.02。

if (_Bitmap.GetPixel(c,d).GetBrightness() < 0.02) { ... } 

答案 1 :(得分:0)

你的问题要么非常简单,要么看似复杂。

像素是否为黑色取决于表示像素的颜色模型。在RGB中,黑色像素由整数0表示。其他颜色模型具有黑色的其他表示。在每种情况下,很容易弄清楚像素是否是纯黑色。 但是你也会问一个像素是否非常非常暗,这可能很棘手。

如果您有明确的黑暗阈值(比如强度/发光小于10%),那么答案也是直截了当的。 这在具有单独强度分量的颜色模型中更容易,但在RGB中,您可能会使用以下近似值redComponent < 25 && greenComponent < 25 && blueComponent < 25

但是如果你问一个像素是否被认为是暗,那么我们就会进入更复杂的领域。为了确定像素是否被感知为暗,您需要考虑相邻像素的值并确定是否存在变暗梯度。如果某些像素色调接近局部强度最大值,则它们看起来会很亮;但如果它们接近局部强度最小值,则会看起来很暗(对于一个众所周知的例子,请参见checker shadow illusion)。同样,与明亮物体相邻的非常暗的变窄线可能看起来像是物体的边缘而不是图像中的暗元素。