看板 C_Sharp 關於我們 聯絡資訊
這個程式是為了判斷一張圖片裡面中,r的平均值和r去做比對, 不知道是寫入圖片的地方錯了,出來的圖片就是全黑 麻煩板上的大大幫我看一下寫入的地方中的指標那裡有問題? private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = System.Drawing.Image.FromFile("C:/fire/3.jpg"); Bitmap bimage = pictureBox1.Image as Bitmap; AForge.Imaging.RGB rgb = new RGB(); AForge.Imaging.ImageStatistics statistics = new AForge.Imaging.ImageStatistics(bimage); AForge.Math.Histogram histogram = statistics.Red; //這是取的r的平 均值 double mean = histogram.Mean; label1.Text = mean.ToString(); BitmapData bmData = bimage.LockBits(new Rectangle(0, 0, bimage.Width, bimage.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); int stride = bmData.Stride; // Step 2: 取得像點資料的起始位址 System.IntPtr Scan0 = bmData.Scan0; // 計算每行的像點所佔據的byte 總數 int ByteNumber_Width = bimage.Width * 3; // 計算每一行後面幾個 Padding bytes int ByteOfSkip = stride - ByteNumber_Width; int Height = bimage.Height; int Width = bimage.Width; int[, ,] rgbData = new int[Width, Height, 3]; // Step 3: 直接利用指標, 把影像資料取出來 unsafe { byte* p = (byte*)(void*)Scan0; for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { if (rgbData[x, y, 0] > mean) { rgbData[x, y, 0] = 255; rgbData[x, y, 1] = 255; rgbData[x, y, 2] = 255; p[0] = (byte)rgbData[x, y, 2]; // 先放 B ++p; p[0] = (byte)rgbData[x, y, 1]; // 再放 G ++p; p[0] = (byte)rgbData[x, y, 0]; // 最後放 R ++p; } else { rgbData[x, y, 0] = 0; rgbData[x, y, 1] = 0; rgbData[x, y, 2] = 0; p[0] = (byte)rgbData[x, y, 2]; // 先放 B ++p; p[0] = (byte)rgbData[x, y, 1]; // 再放 G ++p; p[0] = (byte)rgbData[x, y, 0]; // 最後放 R ++p; } } p += ByteOfSkip; // 跳過剩下的 Padding bytes } } bimage.UnlockBits(bmData); Bitmap binew = pictureBox1.Image as Bitmap; pictureBox1.Image = binew; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.17.136.141
leo60037:if (rgbData[x, y, 0] > mean) 改成 if (p[2] > mean) 11/28 21:57
leo60037:你是要做 Threshold 吧 只考慮 R 這樣效果好嗎? 11/28 22:01