图像处理系统设计.docx
《图像处理系统设计.docx》由会员分享,可在线阅读,更多相关《图像处理系统设计.docx(19页珍藏版)》请在冰豆网上搜索。
![图像处理系统设计.docx](https://file1.bdocx.com/fileroot1/2023-4/16/6a146527-58f6-41ec-915a-12a216250189/6a146527-58f6-41ec-915a-12a2162501891.gif)
图像处理系统设计
图像处理系统设计
一、设计目的
随着社会的发展,数码相机以及相关产品的使用率大大增加,使得电子相片越来越普及。
由于使用者的经验不是很足,导致很多相片都达不到很好的效果,这迫切需要一款图像处理软件,为此我开发设计了图像处理系统,服务大众。
二、设计思路
1.文件:
打开,保存,另存为;
2.图像:
垂直翻转、水平翻转、翻转90度;
3.滤镜:
浮雕、黑白、反色、锐化、反色、棕褐色;
三、流程图
四、界面设计
五、关键代码
1.浮雕处理
privatevoidbtnfudiao_Click(objectsender,EventArgse)//以浮雕效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
intWidth=this.pictureBox1.Image.Width;
intHeight=this.pictureBox1.Image.Height;
BitmapnewBitmap=newBitmap(Width,Height);
BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel1,pixel2;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
for(intx=0;x{
for(inty=0;y{
intr=0,g=0,b=0;
pixel1=oldBitmap.GetPixel(x,y);
pixel2=oldBitmap.GetPixel(x+1,y+1);
r=Math.Abs(pixel1.R-pixel2.R+128);
g=Math.Abs(pixel1.G-pixel2.G+128);
b=Math.Abs(pixel1.B-pixel2.B+128);
if(r>255)
r=255;
if(r<0)
r=0;
if(g>255)
g=255;
if(g<0)
g=0;
if(b>255)
b=255;
if(b<0)
b=0;
newBitmap.SetPixel(x,y,Color.FromArgb(r,g,b));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q);
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=newBitmap;
}
2.黑白处理
privatevoidbtnheibai_Click(objectsender,EventArgse)//以黑白效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
BitmapnewBitmap=newBitmap(Width,Height);
BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
for(intx=0;x{
for(inty=0;y{
pixel=oldBitmap.GetPixel(x,y);
intr,g,b,Result=0;
r=pixel.R;
g=pixel.G;
b=pixel.B;
//实例程序以加权平均值法产生黑白图像
intiType=2;
switch(iType)
{
case0:
//平均值法
Result=((r+g+b)/3);
break;
case1:
//最大值法
Result=r>g?
r:
g;
Result=Result>b?
Result:
b;
break;
case2:
//加权平均值法
Result=((int)(0.7*r)+(int)(0.2*g)+(int)(0.1*b));
break;
}
newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q);
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=newBitmap;
}
3.柔化处理
privatevoidbtnrouhua_Click(objectsender,EventArgse)//以柔化效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
Bitmapbitmap=newBitmap(Width,Height);
BitmapMyBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
int[]Gauss={1,2,1,2,4,2,1,2,1};
for(intx=1;x{
for(inty=1;y{
intr=0,g=0,b=0;
intIndex=0;
for(intcol=-1;col<=1;col++)
for(introw=-1;row<=1;row++)
{
pixel=MyBitmap.GetPixel(x+row,y+col);
r+=pixel.R*Gauss[Index];
g+=pixel.G*Gauss[Index];
b+=pixel.B*Gauss[Index];
Index++;
}
r/=16;
g/=16;
b/=16;
r=r>255?
255:
r;
r=r<0?
0:
r;
g=g>255?
255:
g;
g=g<0?
0:
g;
b=b>255?
255:
b;
b=b<0?
0:
b;
bitmap.SetPixel(x-1,y-1,Color.FromArgb(r,g,b));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q)+1;
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=bitmap;
}
4.锐化处理
privatevoidbtnruihua_Click(objectsender,EventArgse)//以锐化效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
BitmapnewBitmap=newBitmap(Width,Height);
BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
int[]Laplacian={-1,-1,-1,-1,9,-1,-1,-1,-1};
for(intx=1;x{
for(inty=1;y{
intr=0,g=0,b=0;
intIndex=0;
for(intcol=-1;col<=1;col++)
for(introw=-1;row<=1;row++)
{
pixel=oldBitmap.GetPixel(x+row,y+col);r+=pixel.R*Laplacian[Index];
g+=pixel.G*Laplacian[Index];
b+=pixel.B*Laplacian[Index];
Index++;
}
r=r>255?
255:
r;
r=r<0?
0:
r;
g=g>255?
255:
g;
g=g<0?
0:
g;
b=b>255?
255:
b;
b=b<0?
0:
b;
newBitmap.SetPixel(x-1,y-1,Color.FromArgb(r,g,b));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q)+1;
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=newBitmap;
}
5.棕褐色处理
privatevoidbtnzonghese_Click(objectsender,EventArgse)//以棕褐色效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
Bitmapbitmap=newBitmap(Width,Height);
BitmapMyBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel1;
intr,g,b;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
for(inti=1;i{
for(intj=1;j{
pixel1=MyBitmap.GetPixel(i,j);
r=(int)(0.393*pixel1.R+0.769*pixel1.G+0.189*pixel1.B);
g=(int)(0.349*pixel1.R+0.686*pixel1.G+0.168*pixel1.B);
b=(int)(0.272*pixel1.R+0.534*pixel1.G+0.131*pixel1.B);
if(r>255)
r=255;
if(r<0)
r=0;
if(g>255)
g=255;
if(g<0)
g=0;
if(b>255)
b=255;
if(b<0)
b=0;
bitmap.SetPixel(i,j,Color.FromArgb(r,g,b));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q)+1;
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=bitmap;
}
6.反色处理
privatevoidbtnfanse_Click(objectsender,EventArgse)//以反色效果显示图像
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
Bitmapbitmap=newBitmap(Width,Height);
Colorpixel;
doubleq;intw;
progressBar1.Value=0;
progressBar1.Maximum=Width;
for(intx=1;x{
for(inty=1;y{
intr,g,b;
pixel=oldBitmap.GetPixel(x,y);
r=255-pixel.R;
g=255-pixel.G;
b=255-pixel.B;
bitmap.SetPixel(x,y,Color.FromArgb(r,g,b));
}
progressBar1.Value++;
q=(progressBar1.Value/double.Parse(progressBar1.Maximum.ToString()))*100;
w=Convert.ToInt16(q);
label1.Refresh();
label1.Text=w.ToString()+"%";
}
this.pictureBox2.Image=bitmap;
}
7.水平翻转
privatevoidbtnshuipingfanzhuan_Click(objectsender,EventArgse)
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
Colorc=newColor();
Bitmapbox1=newBitmap(pictureBox1.Image);
intrr,gg,bb;
int[,,]pic=newint[600,600,3];
for(inti=0;i{
for(intj=0;j{
c=box1.GetPixel(i,j);
pic[i,j,0]=c.R;
pic[i,j,1]=c.G;
pic[i,j,2]=c.B;
}
}
for(inti=1;i{
for(intj=1;j{
rr=pic[i,j,0];
gg=pic[i,j,1];
bb=pic[i,j,2];
Colorc1=Color.FromArgb(rr,gg,bb);
box1.SetPixel(pictureBox1.Image.Width-i,j,c1);
}
pictureBox2.Image=box1;
}
}
8.垂直翻转
privatevoidbtnchuizhifanzhuan_Click(objectsender,EventArgse)
{
if(pictureBox1.Image==null)
{
MessageBox.Show("没有可处理的图片,请导入!
");
return;
}
Bitmapbt=newBitmap(pictureBox1.Image);
Bitmapbt1=newBitmap(pictureBox1.Image.Height,pictureBox1.Image.Width);
for(inti=0;i{
for(intj=0;j{
intR,G,B;
R=bt.GetPixel(i,j).R;
G=bt.GetPixel(i,j).G;
B=bt.GetPixel(i,j).B;
bt1.SetPixel(j,i,Color.FromArgb(R,G,B));
}
pictureBox1.Refresh();
pictureBox2.Image=bt1;
}
}
9.旋转90度
privatevoidbtnzhuan90du_Click(objectsender,EventArgse)
{
if(pictureBox1.Image==null)
{
MessageBox.Show("错误,没有导入图片!
");
return;
}
Bitmapbt=newBitmap(pictureBox1.Image);
Bitmapbt1=newBitmap(pictureBox1.Height,pictureBox1.Width);
for(inti=0;i{
for(intj=0;j{
intR,G,B;
R=bt.GetPixel(i,j).R;
G=bt.GetPixel(i,j).G;
B=bt.GetPixel(i,j).B;
bt1.SetPixel(j,i,Color.FromArgb(R,G,B));
}
pictureBox1.Refresh();
pictureBox2.Image=bt1;
}
}
六、总结
通过制作了图像处理系统,使我对图像处理技术的理解更进一步加深,制作过程中也使我对C#图像编程更加感兴趣,提高了学习C#的动力,同时,制作过程中出现的问题和在解决问题的过程中,使我提高了处理问题的能力。