最近学图像处理,刚开始就出现问题了,求人帮忙看下,为什么按照这样处理得到的图像,只有上半部分被黑白处理了啊。而且实际上放大能看到图像并不是纯黑白的,求解,下面的方法有什么问题? int width = curBitmap.Width; System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = width * height * 3; byte[] rgbValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0,bytes); double colorTemp; rgbValues[i] = rgbValues[i + 1] = rgbValues[i + 2] = (byte)colorTemp; |
|
5分 |
百度一下图像二值化 例子很多
|
这个是转成灰度图像,还不是二值,就是在网上看了多好,但是没感觉跟我这个有什么差别,不过别人的为什么能整幅图像都变成黑白呢,而且我感觉我这个并不是真正的灰度图片,貌似中间还有红色什么,求解啊! |
|
图像有alpha通道
|
|
30分 |
所以1个像素应该是4bytes,你只用了3bytes,所以只有3/4的图像被替换了
|
5分 |
我在其他帖子的回复
Bitmap bmp = new Bitmap(100, 100); using (Graphics g = Graphics.FromImage(bmp)) { g.FillEllipse(Brushes.Red, new Rectangle(0, 0, 80, 80)); g.FillRectangle(new SolidBrush(Color.FromArgb(128, Color.Green)), new Rectangle(20, 20, 80, 80)); } e.Graphics.DrawImage(bmp, new Point(10, 10)); //简单的 ControlPaint.DrawImageDisabled(e.Graphics, bmp, 120, 10, Color.White); //用颜色矩阵 System.Drawing.Imaging.ImageAttributes attr = new System.Drawing.Imaging.ImageAttributes(); float[][] colorMatrixElements = { new float[] {.33f, .33f, .33f, 0, 0}, // r = (r+g+b)/3 new float[] {.33f, .33f, .33f, 0, 0}, // g = (r+g+b)/3 new float[] {.33f, .33f, .33f, 0, 0}, // b = (r+g+b)/3 new float[] {0, 0, 0, 1, 0}, // alpha scaling factor of 1 new float[] {0, 0, 0, 0, 1}}; // System.Drawing.Imaging.ColorMatrix matrix = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements); attr.SetColorMatrix(matrix); e.Graphics.DrawImage(bmp, new Rectangle(10, 120, 100, 100), 0, 0, 100, 100, GraphicsUnit.Pixel, attr); |