程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 驗證碼圖片二值化問題 BitmapData 怎麼解決,

驗證碼圖片二值化問題 BitmapData 怎麼解決,

編輯:關於C語言

驗證碼圖片二值化問題 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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved