C#图像处理1

底片效果

原理GetPixel方法获得每一点像素的值然后再使用SetPixel方法将取反后的颜色值设置到对应的点.


代码实现

底片效果

       private void button1_Click(object sender, EventArgs e)

{

//以底片效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap newbitmap new Bitmap(Width, Height);

Bitmap oldbitmap (Bitmap)this.pictureBox1.Image;

Color pixel;

for (int 1; Width; x++)

{

for (int 1; Height; y++)

{

int r, g, b;

pixel oldbitmap.GetPixel(x, y);

255 pixel.R;

255 pixel.G;

255 pixel.B;

newbitmap.SetPixel(x, y, Color.FromArgb(r, g, b));

}

}

this.pictureBox1.Image newbitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

浮雕效果

原理对图像像素点的像素值分别与相邻像素点的像素值相减后加上128, 然后将其作为新的像素点的值.


代码实现:

浮雕效果

       private void button1_Click(object sender, EventArgs e)

{

//以浮雕效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap newBitmap new Bitmap(Width, Height);

Bitmap oldBitmap (Bitmap)this.pictureBox1.Image;

Color pixel1, pixel2;

for (int 0; Width 1; x++)

{

for (int 0; Height 1; y++)

{

int 0, 0, 0;

pixel1 oldBitmap.GetPixel(x, y);

pixel2 oldBitmap.GetPixel(x 1, 1);

Math.Abs(pixel1.R pixel2.R 128);

Math.Abs(pixel1.G pixel2.G 128);

Math.Abs(pixel1.B pixel2.B 128);

if (r 255)

255;

if (r 0)

0;

if (g 255)

255;

if (g 0)

0;

if (b 255)

255;

if (b 0)

0;

newBitmap.SetPixel(x, y, Color.FromArgb(r, g, b));

}

}

this.pictureBox1.Image newBitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

黑白效果

原理彩色图像处理成黑白效果通常有3种算法;

(1).最大值法使每个像素点的 R, G, 值等于原像素点的 RGB (颜色值中最大的一个;

(2).平均值法使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值;

(3).加权平均值法对每个像素点的 R, G, B值进行加权

    ---自认为第三种方法做出来的黑白效果图像最 "真实".


代码实现:

黑白效果

        private void button1_Click(object sender, EventArgs e)

{

//以黑白效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap newBitmap new Bitmap(Width, Height);

Bitmap oldBitmap (Bitmap)this.pictureBox1.Image;

Color pixel;

for (int 0; Width; x++)

for (int 0; Height; y++)

{

pixel oldBitmap.GetPixel(x, y);

int r, g, b, Result 0;

pixel.R;

pixel.G;

pixel.B;

//实例程序以加权平均值法产生黑白图像

                        int iType =2;

switch (iType)

{

case 0://平均值法

                                Result ((r b) 3);

break;

case 1://最大值法

                                Result g;

Result Result Result b;

break;

case 2://加权平均值法

                                Result ((int)(0.7 r) (int)(0.2 g) (int)(0.1 b));

break;

}

newBitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result));

}

this.pictureBox1.Image newBitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示");

}

柔化效果

原理当前像素点与周围像素点的颜色差距较大时取其平均值.

效果图:


代码实现:

柔化效果

        private void button1_Click(object sender, EventArgs e)

{

//以柔化效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap bitmap new Bitmap(Width, Height);

Bitmap MyBitmap (Bitmap)this.pictureBox1.Image;

Color pixel;

//高斯模板

                int[] Gauss ={ 1, 2, 1, 2, 4, 2, 1, 2, };

for (int 1; Width 1; x++)

for (int 1; Height 1; y++)

{

int 0, 0, 0;

int Index 0;

for (int col -1; col <= 1; col++)

for (int row -1; row <= 1; row++)

{

pixel MyBitmap.GetPixel(x row, col);

+= pixel.R Gauss[Index];

+= pixel.G Gauss[Index];

+= pixel.B Gauss[Index];

Index++;

}

/= 16;

/= 16;

/= 16;

//处理颜色值溢出

                        255 255 r;

r;

255 255 g;

g;

255 255 b;

b;

bitmap.SetPixel(x 1, 1, Color.FromArgb(r, g, b));

}

this.pictureBox1.Image bitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示");

}

.锐化效果

原理:突出显示颜色值大(即形成形体边缘)的像素点.

效果图:


实现代码:

锐化效果

       private void button1_Click(object sender, EventArgs e)

{

//以锐化效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap newBitmap new Bitmap(Width, Height);

Bitmap oldBitmap (Bitmap)this.pictureBox1.Image;

Color pixel;

//拉普拉斯模板

                int[] Laplacian ={ -1, -1, -1, -1, 9, -1, -1, -1, -1 };

for (int 1; Width 1; x++)

for (int 1; Height 1; y++)

{

int 0, 0, 0;

int Index 0;

for (int col -1; col <= 1; col++)

for (int row -1; row <= 1; row++)

{

pixel oldBitmap.GetPixel(x row, col); += pixel.R Laplacian[Index];

+= pixel.G Laplacian[Index];

+= pixel.B Laplacian[Index];

Index++;

}

//处理颜色值溢出

                        255 255 r;

r;

255 255 g;

g;

255 255 b;

b;

newBitmap.SetPixel(x 1, 1, Color.FromArgb(r, g, b));

}

this.pictureBox1.Image newBitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示");

}

雾化效果

原理在图像中引入一定的随机值打乱图像中的像素值

效果图:


实现代码:

雾化效果

       private void button1_Click(object sender, EventArgs e)

{

//以雾化效果显示图像

            try

{

int Height this.pictureBox1.Image.Height;

int Width this.pictureBox1.Image.Width;

Bitmap newBitmap new Bitmap(Width, Height);

Bitmap oldBitmap (Bitmap)this.pictureBox1.Image;

Color pixel;

for (int 1; Width 1; x++)

for (int 1; Height 1; y++)

{

System.Random MyRandom new Random();

int MyRandom.Next(123456);

//像素块大小

                        int dx 19;

int dy 19;

if (dx >= Width)

dx Width 1;

if (dy >= Height)

dy Height 1;

pixel oldBitmap.GetPixel(dx, dy);

newBitmap.SetPixel(x, y, pixel);

}

this.pictureBox1.Image newBitmap;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "信息提示");

}


posted @ 2011-04-28 21:42  linjianlong  阅读(306)  评论(0)    收藏  举报