验证码图片二值化问题 BitmapData 怎么解决
对不起,这算是一篇求助啦,先上图,防止不清楚,放大了一点,下面是图片,上面是没有二值化的,下面是二值化之后的,我其实不懂什么是二值化啦,就是一定范围变黑,变白
问题:
为什么我的结果上面还是有很多彩色的小点点呢?原来都是没有的……
谁能帮我看看代码怎么改!谢谢大牛们帮忙!!
Bitmap bit1 = new Bitmap(bit); Rectangle rect1 = new Rectangle(0, 0, bit1.Width, bit1.Height); BitmapData bitd = bit1.LockBits(rect1, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); IntPtr srcPtr = bitd.Scan0; int scanWidth = bitd.Width * 3; int src_bytes = scanWidth * bitd.Height; byte[] srcRGBValues = new byte[src_bytes]; Marshal.Copy(srcPtr, srcRGBValues, 0, src_bytes); //灰度化处理 int m = 0, i = 0, j = 0; //m表示行,j表示列 int k = 0; for (i = 0; i < bit.Height; i++) //只获取图片的rows行像素值 { for (j = 0; j < bit.Width; j++) { //只处理每行中图像像素数据,舍弃未用空间 //注意位图结构中RGB按BGR的顺序存储 k = 3 * j; var grays = Convert.ToInt16(srcRGBValues[i * scanWidth + k + 2]) + Convert.ToInt16(srcRGBValues[i * scanWidth + k + 1]) + Convert.ToInt16(srcRGBValues[i * scanWidth + k + 0]); if (grays >= 382) { srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(255); srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(255); srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(255); } else { srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(0); srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(0); srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(0); } } m++; } Marshal.Copy(srcRGBValues, 0, srcPtr, src_bytes); bit1.UnlockBits(bitd); Image image1 = bit1;
LoveLong —— 龙之恋 爱恒久绵长