大家看图片,确实的,这不是标准的二值化操作,我的代码是这样的,
但是为什么会出现很多彩色雪花点的问题呢,我的代码问题在哪呢,求帮助
1 Bitmap bit1 = new Bitmap(bit); 2 3 Rectangle rect1 = new Rectangle(0, 0, bit1.Width, bit1.Height); 4 BitmapData bitd = bit1.LockBits(rect1, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 5 6 IntPtr srcPtr = bitd.Scan0; 7 8 int scanWidth = bitd.Width * 3; 9 int src_bytes = scanWidth * bitd.Height; 10 byte[] srcRGBValues = new byte[src_bytes]; 11 12 Marshal.Copy(srcPtr, srcRGBValues, 0, src_bytes); 13 14 //灰度化处理 15 int m = 0, i = 0, j = 0; //m表示行,j表示列 16 int k = 0; 17 18 for (i = 0; i < bit.Height; i++) //只获取图片的rows行像素值 19 { 20 for (j = 0; j < bit.Width; j++) 21 { 22 //只处理每行中图像像素数据,舍弃未用空间 23 //注意位图结构中RGB按BGR的顺序存储 24 k = 3 * j; 25 var grays = Convert.ToInt16(srcRGBValues[i * scanWidth + k + 2]) + 26 Convert.ToInt16(srcRGBValues[i * scanWidth + k + 1]) + 27 Convert.ToInt16(srcRGBValues[i * scanWidth + k + 0]); 28 if (grays >= 382) 29 { 30 srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(255); 31 srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(255); 32 srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(255); 33 } 34 else 35 { 36 srcRGBValues[i * scanWidth + k + 2] = Convert.ToByte(0); 37 srcRGBValues[i * scanWidth + k + 1] = Convert.ToByte(0); 38 srcRGBValues[i * scanWidth + k + 0] = Convert.ToByte(0); 39 40 } 41 } 42 m++; 43 } 44 Marshal.Copy(srcRGBValues, 0, srcPtr, src_bytes); 45 bit1.UnlockBits(bitd); 46 Image image1 = bit1;
另外,谁能提供C#的验证码识别的相关方法吗,还有二值化的标准方法是怎么的呢
搜索: C#图片二值化 ,可以按照里面的方案试一下。
什么?没懂
@竹峰(Z.峰): 给你搜索的关键字哇:“C#图片二值化”,相当多的示例代码。
@幻天芒: 约等于没回答,好吧,可惜就是百度来的,没搞定
@LoveLong: 二值化就是把像素点一个一个取出来,然后按照一个极限值判断,大于就1,小于就0,这样就把图片变成了黑白两色的。