如何在C#中识别黑色或黑色图像?
如何识别C#中的黑色/黑色图像。是否有任何API来检查图像的可见性或暗度比?在我的应用程序中,在复制图像时,我希望检查每个图像并丢弃黑色图像如何在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
有没有办法做到这一点?获得图像暗/亮的方法可以是:
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