對不起,這算是一篇求助啦,先上圖,防止不清楚,放大了一點,下面是圖片,上面是沒有二值化的,下面是二值化之後的,我其實不懂什麼是二值化啦,就是一定范圍變黑,變白
問題:
為什麼我的結果上面還是有很多彩色的小點點呢?原來都是沒有的……
誰能幫我看看代碼怎麼改!謝謝大牛們幫忙!!
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;