作者tkisky (FlyToast)
看板C_Sharp
标题[问题] 影像处理图片写入问题
时间Fri Nov 28 15:57:42 2008
这个程式是为了判断一张图片里面中,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
1F:推 leo60037:if (rgbData[x, y, 0] > mean) 改成 if (p[2] > mean) 11/28 21:57
2F:→ leo60037:你是要做 Threshold 吧 只考虑 R 这样效果好吗? 11/28 22:01