C#图像处理之头发检测的方法

 更新时间:2015年04月24日 10:09:56   作者:沧海一粟……  
这篇文章主要介绍了C#图像处理之头发检测的方法,可实现针对图像中头发的检测功能,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#图像处理之头发检测的方法。分享给大家供大家参考。具体如下:

//发色检测(YCbCr颜色空间)
public Bitmap HairD(Bitmap a)
{
  Rectangle rect = new Rectangle(0, 0, a.Width, a.Height);
  System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  int stride = bmpData.Stride;
  unsafe
  {
   byte* pIn = (byte*)bmpData.Scan0.ToPointer();
   byte* p;
   int R, G, B;
   double Cr, Cb,BrightV;
   for (int y = 0; y < a.Height; y++)
   {
     for (int x = 0; x < a.Width; x++)
     {
     p = pIn;
     R = p[2];
     G = p[1];
     B = p[0];
     Cb = 128 - 37.797 * R / 255 - 74.203 * G / 255 + 112 * B / 255;
     Cr = 128 + 112 * R / 255 - 93.768 * G / 255 - 18.214 * B / 255;
     BrightV = (R + G + B) / 3;
     if (!(Cb >= 115 && Cb <= 141 && Cr >= 115 && Cr <= 143 && (R < 35)))
     {
       pIn[0] = (byte)255;
       pIn[1] = (byte)255;
       pIn[2] = (byte)255;
     }
     pIn += 3;
     }
     pIn += stride - a.Width * 3;
   }
  }
  a.UnlockBits(bmpData);
  return a;
}
//定义最小值函数
public double Min(double a, double b, double c)
{
  double e = (a <= b ? a : b) <= c ? (a <= b ? a : b) : c;
  return e;
}
//定义最大值函数
public int Max(int a, int b, int c)
{
  int e = (a >= b ? a : b) <= c ? c : (a >= b ? a : b);
  return e;
}

结果图像效果:

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • 解决unity3d导入模型贴图材质丢失的问题

    解决unity3d导入模型贴图材质丢失的问题

    这篇文章主要介绍了解决unity3d导入模型贴图材质丢失的问题,具有很好的参考价值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#静态方法的使用

    C#静态方法的使用

    这篇文章介绍了C#静态方法的使用,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#判断数据类型的简单示例代码

    C#判断数据类型的简单示例代码

    本篇文章要是对C#中判断数据类型的简单示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 浅谈C#中正则表达式的使用

    浅谈C#中正则表达式的使用

    本篇文章主要介绍了C#中正则表达式的使用,具有一定的参考价值,有需要的可以了解一下。
    2016-12-12
  • 利用WCF双工模式实现即时通讯

    利用WCF双工模式实现即时通讯

    这篇文章主要介绍了利用WCF双工模式实现即时通讯的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • C#常用多线程(线程同步,事件触发,信号量,互斥锁,共享内存,消息队列)

    C#常用多线程(线程同步,事件触发,信号量,互斥锁,共享内存,消息队列)

    这篇文章主要介绍了C#常用多线程(线程同步,事件触发,信号量,互斥锁,共享内存,消息队列),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • C#创建一个可快速重复使用的项目模板(详细过程)

    C#创建一个可快速重复使用的项目模板(详细过程)

    这篇文章主要介绍了C#如何创建一个可快速重复使用的项目模板今天给大家介绍的是基于官方的cli donet new 命令创建自己的项目模板,需要的朋友可以参考下
    2024-06-06
  • C#生成随机字符串的实例

    C#生成随机字符串的实例

    本文介绍了“C#生成随机字符串的实例”,需要的朋友可以参考一下
    2013-03-03
  • C#使用handle实现获取占用指定文件或文件夹的进程

    C#使用handle实现获取占用指定文件或文件夹的进程

    很多时候,一些不知道啥进程,把你的文件给占用了,然后就没办法删掉或者做其他操作,如果使用Locksmith功能,就可以实现快速锁定是哪个进程在搞事情,把对应进程干掉就可以了,下面内容演示C#使用几行代码实现File Locksmith功能,需要的朋友可以参考下
    2024-09-09
  • C#使用TimeSpan时间计算的简单实现

    C#使用TimeSpan时间计算的简单实现

    这篇文章主要给大家介绍了关于C#使用TimeSpan时间计算的相关资料,以及通过一个实例代码给大家介绍了C#使用timespan和timer完成一个简单的倒计时器的方法,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06

最新评论