如何在C#中识别黑色或黑色图像?

如何在C#中识别黑色或黑色图像?,c#,.net,image-processing,C#,.net,Image Processing,如何识别C#中的黑色/黑色图像。是否有任何API来检查图像的可见性或暗度比?在我的应用程序中,在复制图像时,我希望检查每个图像并丢弃黑色图像 有没有办法做到这一点?获得图像暗/亮的方法可以是: Bitmap bitmap = // the bitmap var colors = new List<Color>(); for (int x = 0; x < bitmap.Size.Width; x++) { for (int y = 0; y < bitmap.Si

如何识别C#中的黑色/黑色图像。是否有任何API来检查图像的可见性或暗度比?在我的应用程序中,在复制图像时,我希望检查每个图像并丢弃黑色图像


有没有办法做到这一点?

获得图像暗/亮的方法可以是:

Bitmap bitmap = // the bitmap
var colors = new List<Color>();
for (int x = 0; x < bitmap.Size.Width; x++)
{
    for (int y = 0; y < bitmap.Size.Height; y++)
    {
        colors.Add(bitmap.GetPixel(x, y));
    }
}

float imageBrightness = colors.Average(color => color.GetBrightness());
Bitmap Bitmap=//位图
var colors=新列表();
用于(int x=0;xcolor.GetBrightness());

也许认为暗图像是亮度小于0.1(或任何其他相关值)的< < /P> < P>一个获得图像暗/亮度的想法可以是:

Bitmap bitmap = // the bitmap
var colors = new List<Color>();
for (int x = 0; x < bitmap.Size.Width; x++)
{
    for (int y = 0; y < bitmap.Size.Height; y++)
    {
        colors.Add(bitmap.GetPixel(x, y));
    }
}

float imageBrightness = colors.Average(color => color.GetBrightness());
Bitmap Bitmap=//位图
var colors=新列表();
用于(int x=0;xcolor.GetBrightness());

也许认为暗图像是亮度小于0.1(或任何其他相关值)

< P>我先从图像中的所有像素迭代,计算每个像素的颜色,然后平均“V”分量(代表颜色的‘亮度’)。计算每个像素的颜色,然后平均“V”分量(代表颜色的“亮度”)。

//用于快速访问像素
公共静态不安全字节[]位图字节数组(位图){
BitmapData bmd=bitmap.LockBits(新矩形(0,0,bitmap.Width,bitmap.Height)、ImageLockMode.ReadOnly、,
PixelFormat.Format32bppArgb);
字节[]字节=新字节[bmd.Height*bmd.Stride];
字节*pnt=(字节*)bmd.Scan0;
封送处理副本((IntPtr)pnt,字节,0,bmd.Height*bmd.Stride);
位图。解锁位(bmd);
返回字节;
}
公共布尔IsDark(位图、字节公差、双暗程序){
字节[]字节=位图字节数组(位图);
int count=0,all=bitmap.Width*bitmap.Height;
对于(int i=0;i//用于快速访问像素
公共静态不安全字节[]位图字节数组(位图){
BitmapData bmd=bitmap.LockBits(新矩形(0,0,bitmap.Width,bitmap.Height)、ImageLockMode.ReadOnly、,
PixelFormat.Format32bppArgb);
字节[]字节=新字节[bmd.Height*bmd.Stride];
字节*pnt=(字节*)bmd.Scan0;
封送处理副本((IntPtr)pnt,字节,0,bmd.Height*bmd.Stride);
位图。解锁位(bmd);
返回字节;
}
公共布尔IsDark(位图、字节公差、双暗程序){
字节[]字节=位图字节数组(位图);
int count=0,all=bitmap.Width*bitmap.Height;
对于(int i=0;i饱和度
值,或使用
亮度
直方图

该类用于为每个HSL颜色通道积累有关图像的统计值,如直方图、平均值、标准偏差等

该类接受24和32 bpp的彩色图像进行处理

示例用法C#:

您可以使用包含图像处理支持的框架。 例如,请参见。选择适当的
饱和度
值,或使用
亮度
直方图

该类用于为每个HSL颜色通道积累有关图像的统计值,如直方图、平均值、标准偏差等

该类接受24和32 bpp的彩色图像进行处理

示例用法C#:


感谢以利沙的想法,我是这样做的:

Bitmap bitmap = new Bitmap("123712.jpg");
float brightness = 0;
for (int x = 0; x < bitmap.Size.Width; x++)
{
     for (int y = 0; y < bitmap.Size.Height; y++)
     {
          brightness += bitmap.GetPixel(x, y).GetBrightness();
     }
}

float average = brightness / (bitmap.Size.Width * bitmap.Size.Height);
Bitmap Bitmap=新位图(“123712.jpg”);
浮动亮度=0;
用于(int x=0;x
谢谢以利沙的想法,我是这样做的:

Bitmap bitmap = new Bitmap("123712.jpg");
float brightness = 0;
for (int x = 0; x < bitmap.Size.Width; x++)
{
     for (int y = 0; y < bitmap.Size.Height; y++)
     {
          brightness += bitmap.GetPixel(x, y).GetBrightness();
     }
}

float average = brightness / (bitmap.Size.Width * bitmap.Size.Height);
Bitmap Bitmap=新位图(“123712.jpg”);
浮动亮度=0;
用于(int x=0;x
为了获得更好的性能,我使用了Accord.Net图像处理。GetPixel相当慢

注意所需的使用语句:

using Accord.Imaging;

using Accord.Imaging.Converters;


    private bool IsDarkImage(Bitmap aBitmap, int darkThreshold)
    {
        double arrayAverage = 0;
        bool isDark = true;

        ImageToArray conv = new ImageToArray(min: 0, max: 255);
        conv.Convert(aBitmap, out double[] array);
        arrayAverage = (double) array.Sum() / (double) array.Length;
        if (arrayAverage < darkThreshold)
        {
            isDark = true;
        }
        else
        {
            isDark = false;
        }
        return isDark;
    }
使用Accord.Imaging;
使用Accord.Imaging.converter;
私有布尔IsDarkImage(位图aBitmap,int-darkThreshold)
{
双阵列平均值=0;
bool-isDark=true;
ImageToArray conv=新的ImageToArray(最小值:0,最大值:255);
conv.Convert(aBitmap,out double[]数组);
arrayAverage=(double)array.Sum()/(double)array.Length;
if(阵列平均值<暗阈值)
{
isDark=true;
}
其他的
{
isDark=假;
}
返回isDark;
}

为了获得更好的性能,我使用了Accord.Net图像处理。GetPixel相当慢

注意所需的使用语句:

using Accord.Imaging;

using Accord.Imaging.Converters;


    private bool IsDarkImage(Bitmap aBitmap, int darkThreshold)
    {
        double arrayAverage = 0;
        bool isDark = true;

        ImageToArray conv = new ImageToArray(min: 0, max: 255);
        conv.Convert(aBitmap, out double[] array);
        arrayAverage = (double) array.Sum() / (double) array.Length;
        if (arrayAverage < darkThreshold)
        {
            isDark = true;
        }
        else
        {
            isDark = false;
        }
        return isDark;
    }
使用Accord.Imaging;
使用Accord.Imaging.converter;
私有布尔IsDarkImage(位图aBitmap,int-darkThreshold)
{
双阵列平均值=0;
bool-isDark=true;
ImageToArray conv=新的ImageToArray(mi