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;
  • 相关阅读:
    vs整合MySQL和QT
    VS2019中QT连接及使用
    JavaScript 进阶入门
    解决MySQL workbench的resultgird不出现的问题
    JavaScript入门
    CSS学习
    Linux下如何查看tomcat是否启动、查看tomcat启动日志
    oracle常见的函数
    java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
    位运算(&、|、^、~、>>、<<)
  • 原文地址:https://www.cnblogs.com/herbertchina/p/4499200.html
Copyright © 2011-2022 走看看