C#数字图象处理之肤色检测的方法
2015-04-24 10:17
1296 查看
本文实例讲述了C#数字图象处理之肤色检测的方法。分享给大家供大家参考。具体如下:
//定义肤色检测函数(可供人脸检测等研究使用) public Bitmap SkinDetect1(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 r, g, Fupr,Flor,Wrg; for (int y = 0; y < a.Height; y++) { for (int x = 0; x < a.Width; x++) { P = pIn; B = P[0]; G = P[1]; R = P[2]; if (R + G + B == 0) { r = 0; g = 0; } else { r = (R / (R + G + B)); g = (G / (R + G + B)); } Fupr = (1.0743 * r + 0.1452-1.3767 * r * r) ; Flor = (0.5601 * r + 0.1766-0.776 * r * r); Wrg = (r - 0.33) * (r - 0.33) + (g - 0.33) * (g - 0.33); if ((R - G >= 45) && ((R > G) && (G > B)) && (Fupr > g) && (Wrg >= 0.0004)) { P[0] = (byte)B; P[1] = (byte)G; P[2] = (byte)R; } else { P[0] = 0; P[1] = 0; P[2] = 0; } pIn += 3; } pIn += stride - a.Width * 3; } } a.UnlockBits(bmpData); return a; }
效果图像:
希望本文所述对大家的C#程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- C#数字图象处理之图像灰度化方法
- Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法
- Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测
- C#图像处理之边缘检测(Sobel)的方法
- C#图像处理之图像目标质心检测的方法
- Win8 Metro(C#)数字图像处理--2.36角点检测算法
- (续)用c#实现的数字图象处理----正在更新中!
- Win8Metro(C#)数字图像处理--2.12Sobel边缘检测
- C#图像处理之边缘检测(Smoothed)的方法
- C#正则检测字符串是否字母数字混编的方法
- C#数字图像处理的3种方法
- Win8Metro(C#)数字图像处理--2.13Roberts边缘检测
- Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测
- Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化
- c# 数字图像处理的一些方法
- C#/.net学习---字符串处理的各种方法实例
- NET 2.0(C#)调用ffmpeg处理视频的方法
- 数字的处理方法(保留小数点两位、将数字转化为千分位格式)
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- C#中字符串常用的处理方法