zoukankan      html  css  js  c++  java
  • 验证码图片二值化问题 BitmapData 怎么解决

    对不起,这算是一篇求助啦,先上图,防止不清楚,放大了一点,下面是图片,上面是没有二值化的,下面是二值化之后的,我其实不懂什么是二值化啦,就是一定范围变黑,变白

    问题:

    为什么我的结果上面还是有很多彩色的小点点呢?原来都是没有的……

    谁能帮我看看代码怎么改!谢谢大牛们帮忙!!

    QQ截图20150513012023

                    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;
  • 相关阅读:
    2021软件工程-个人阅读作业
    OO第四单元——基于UML的UML解析器总结&OO课程总结
    OO第三单元——基于JML的社交网络总结
    OO第二单元——电梯作业总结
    SQL拼接字符串
    SQL查询列表中每种类型的第一条
    JS获取当前时间,设置不可用以前的时间
    JavaScript中的函数使用
    .Net软件开发面试技巧
    .Net小白的第一篇博客
  • 原文地址:https://www.cnblogs.com/herbertchina/p/4499200.html
Copyright © 2011-2022 走看看