收藏 分享(赏)

第7章 图像处理.ppt

上传人:hwpkd79526 文档编号:10069234 上传时间:2019-10-04 格式:PPT 页数:42 大小:937.50KB
下载 相关 举报
第7章 图像处理.ppt_第1页
第1页 / 共42页
第7章 图像处理.ppt_第2页
第2页 / 共42页
第7章 图像处理.ppt_第3页
第3页 / 共42页
第7章 图像处理.ppt_第4页
第4页 / 共42页
第7章 图像处理.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

1、Visual C#.NET程序设计基础教程 第7章,第7章 图像处理,Visual C#.NET程序设计基础教程 第7章,GDI和GDI+,计算机在屏幕上绘图时,把指令发送给视频卡。问题是市面上有几百种不同的视频卡,大多数有不同的指令集和功能 GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用Windows API函数完成指定的任务了,Visual C#.NET程序设计基础教程 第7章,GDI给开发人员提供了一个相当高级的API,但它仍是一个基于旧的Windows API并且有C语言风格函数的API,所以使用起来不是很方便。GDI+在很大程度上是GDI和应用程序之间的一层,提

2、供了更直观、基于继承性的对象模型。尽管GDI+基本上是GDI的一个包装器,但Microsoft已经能通过GDI+提供新功能了,它还有一些性能方面的改进。,GDI+提供了二维矢量图形、图像处理的功能。 GDI+ 在 GDI(较早版本的 Windows 中提供的 Graphics Device Interface)的基础上进行了改进,添加了新功能并优化了现有功能。.NET基类库的GDI+部分非常大。,Visual C#.NET程序设计基础教程 第7章,1. GDI +命名空间 System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问。在 System.Drawing.Drawi

3、ng2D、System.Drawing.Imaging 以及 System.Drawing.Text 命名空间中提供了更高级的功能。,Visual C#.NET程序设计基础教程 第7章,Visual C#.NET程序设计基础教程 第7章,2. 设备环境和Graphics对象,在GDI中,识别输出设备的方式是使用设备环境(DC)对象。DC(设备环境)是一个功能非常强大的对象,在GDI下,所有的绘图工作都必须通过设备环境来完成,Visual C#.NET程序设计基础教程 第7章,在GDI+中,设备环境包装在.NET基类System. Drawing.Graphics中。大多数绘图工作都是调用Gra

4、phics实例的方法完成的。实际上,因为Graphics类负责处理大多数绘图操作,所以GDI+中很少有操作不涉及到Graphics实例。理解如何处理这个对象是理解如何使用GDI+在显示设备上绘图的关键。,Visual C#.NET程序设计基础教程 第7章,创建一个Graphics对象,我们可以通过三种方式创建一个Graphics对象。 (1)通过视窗中的Paint 事件的PaintEventArgs直接引用视窗的Graphics对象。 private void Form1_Paint(Object sender, System.Windows.Forms. PaintEventArgs P)

5、Graphics dc=P.Graphics; ,Visual C#.NET程序设计基础教程 第7章,(2) 使用窗体的CreateGraphics()方法创建一个Graphics对象。Graphics dc = this.CreateGraphics(); (3) 通过图像对象创建一个Graphics对象。Graphics g = Graphics.FromImage(image);,Visual C#.NET程序设计基础教程 第7章,位图类型,位图是位的数组,它指定了像素矩阵中各像素的颜色。专用于单个像素的位数决定了可分配到该像素的颜色数。,Visual C#.NET程序设计基础教程 第7

6、章,图形文件格式,1、 BMP 、GIF 3、JPEG 4、标签图像文件格式,Visual C#.NET程序设计基础教程 第7章,图像处理常用的类及控件,1 PictureBox 控件 PictureBox 控件用于显示位图、GIF、JPEG、图元文件或图标格式的图形。所显示的图片由 Image 属性确定,该属性可在运行时或设计时设置。SizeMode 属性控制使图像和控件彼此适合的方式。 2 OpenFileDialog 组件/类 OpenFileDialog 组件是一个预先配置的对话框。它与 Windows 操作系统所公开的“打开文件”对话框相同。可使用 ShowDialog 方法在运行时

7、显示该对话框。另外,可使用Filter 属性设置当前文件名筛选字符串,该字符串确定出现在对话框的“文件类型”框中的选择。使用FileName获取打开的文件名。,Visual C#.NET程序设计基础教程 第7章,3 SaveFileDialog 组件/类 Windows 窗体 SaveFileDialog 组件是一个预先配置的对话框。它与 Windows 使用的标准“保存文件”对话框相同。该组件继承自 CommonDialog 类。 使用方式与OpenFileDialog类似。 4 Bitmap类 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。Bitmap 是用于处理由像素数据

8、定义的图像对象。 5 Image 类 为 Bitmap 和 Metafile 的类提供功能的抽象基类,Visual C#.NET程序设计基础教程 第7章,打开图像,(1)通过PictureBox 打并显示图像 在窗体中绘制 PictureBox控件, 在Image属性中输入要打开的图像文件名。,Visual C#.NET程序设计基础教程 第7章,(2)通过打开文件对话框打开图像 读取图像仅需使用一行代码: Image myImage = Bitmap.FromFile(“FileName“); 或者 Bitmap bitmap=(Bitmap)Bitmap.FromFile(“FileName

9、“); 或者 Bitmap bitmap=new Bitmap(“FileName“); 文件名可以通过文件打开对话框获取。,Visual C#.NET程序设计基础教程 第7章,图像的显示,1、通过PictureBox 控件显示图像 首先在视窗上建立一PictureBox对象,其名字为“pictureBox1” 然后用下述代码显示图像 this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;this.pictureBox1.Image = bitmap;,Visual C#.NET程序设计基础教程 第7章,2、通过Graphics类的Dr

10、awImage方法显示图像Graphics g = this.CreateGraphics();g.DrawImage(bitmap,new Point(0,0);,Visual C#.NET程序设计基础教程 第7章,(1) 按任意大小和形状显示图像,用DrawImage可以显示缩大及缩小的图像,其语句为 public void DrawImage (Image image, Rectangle rect),Visual C#.NET程序设计基础教程 第7章,Graphics myGraphics = this.CreateGraphics(); Bitmap myBitmap = new B

11、itmap(“Spiral.png“); Rectangle expansionRectangle = new Rectangle(135, 10, myBitmap.Width*2, myBitmap.Height); Rectangle compressionRectangle = new Rectangle(300, 10, myBitmap.Width / 2, myBitmap.Height/2); myGraphics.DrawImage(myBitmap, 10, 10); myGraphics.DrawImage(myBitmap, expansionRectangle); m

12、yGraphics.DrawImage(myBitmap, compressionRectangle);,Visual C#.NET程序设计基础教程 第7章,(2) DrawImage 显示图像的指定部分,用Drawimage 可以只显示图像的一部分,其语句如下: public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit),Visual C#.NET程序设计基础教程 第7章,其代码如下: Graphics myGraphics = this.CreateGrap

13、hics(); Bitmap myBitmap = new Bitmap(“Runner.jpg“); / 指定要显示的部分(手) Rectangle sourceRectangle = new Rectangle(80, 70, 80, 45); / 指定显示的大小(缩小) Rectangle destRectangle1 = new Rectangle(200, 10, 20, 16); /指定显示的大小(放大) Rectangle destRectangle2 = new Rectangle(200, 40, 200, 160); / 在(0, 0)显示原始图像. myGraphics.

14、DrawImage(myBitmap, 0, 0); / 显示缩小的图像 myGraphics.DrawImage(myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel); /显示放大的图像 myGraphics.DrawImage(myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel);,Visual C#.NET程序设计基础教程 第7章,3)旋转、反射和扭曲图像,格式为: public void DrawImage ( Image image, Poi

15、nt destPoints) destPoints 为三个 Point 结构组成的数组,这三个结构定义一个平行四边形。 例如,假设原始图像是一个矩形,其左上角、右上角和左下角分别位于 (0, 0)、(100, 0) 和 (0, 50)。现在假设我们将这三个点按以下方式映射到目标点,Visual C#.NET程序设计基础教程 第7章,其代码为: Graphics myGraphics = this.CreateGraphics(); Point destinationPoints = new Point(200, 20), / 左上角new Point(110, 100), / 右上角new P

16、oint(250, 30); / 左下角 Image image = new Bitmap(“Stripes.bmp“); / 在左上角(0,0)处显示原图像 myGraphics.DrawImage(image, 0, 0); /显示图片的扭曲、旋转和平移. myGraphics.DrawImage(image, destinationPoints);,Visual C#.NET程序设计基础教程 第7章,图像的复制,Bitmap 类提供了 Clone 方法,可用于制作现有 Bitmap 的副本或部分副本。 格式: public Bitmap Clone (RectangleF rect, P

17、ixelFormat format) rect 定义此 Bitmap 中要复制的部分。坐标相对于此 Bitmap。format 为目标 Bitmap 指定 PixelFormat 枚举。 Clone 方法带有源矩形参数,可用于指定要复制的原始位图的部分。,Visual C#.NET程序设计基础教程 第7章,下面的代码复制现有 Bitmap 图像的上半部分,并显示两幅图像。 Graphics myGraphics = this.CreateGraphics(); Bitmap originalBitmap = new Bitmap(“Spiral.png“); Rectangle sourceR

18、ectangle = new Rectangle(0,0, originalBitmap.Width,originalBitmap.Height/2); Bitmap secondBitmap = originalBitmap.Clone(sourceRectangle,PixelFormat.DontCare); myGraphics.DrawImage(originalBitmap, 10, 10); myGraphics.DrawImage(secondBitmap, 150, 10);,Visual C#.NET程序设计基础教程 第7章,图像翻转,语句的格式为: public void

19、 RotateFlip (RotateFlipType rotateFlipType) rotateFlipType值为下表所述,rotateFlipType的值,Visual C#.NET程序设计基础教程 第7章,1 水平翻转 图像的水平翻转即把图像的左右像素互换如图: 语句为 bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);,Visual C#.NET程序设计基础教程 第7章,2 竖直翻转 图像的水平翻转即把图像的上下像素互换,其语句为:bitmap.RotateFlip(RotateFlipType.Rotate180FlipY); 3

20、旋转90度 其语句为: bitmap.RotateFlip(RotateFlipType. Rotate90FlipNone);,Visual C#.NET程序设计基础教程 第7章,像素处理,像素颜色值的获取与设置 像素的颜色由Color对象表示,可以用如下语句构造 Color c=new Color(); 或 Color c1=Color.FromArgb(a,r,g,b); a 表示透明程度,可以省略 r为红色分量 g 为绿色分量 b 为蓝色分量,Visual C#.NET程序设计基础教程 第7章, 像素颜色的获取 可以使用Bitmap类(或 Image 类)的 GetPixel获取图像的

21、颜色,其格式为: olor c=new Color(); c=bitmap.Getpixel(i,j); bitmap为Bitmap(或 Image 类)的对象名字,(i,j)表示像素的位置,即表示第i列第j行的像素。,Visual C#.NET程序设计基础教程 第7章,3像素颜色的设置 可以使用Bitmap类(或 Image 类)的 SetPixel获取图像的颜色,其格式为: Color c1=Color.FromArgb(rr,gg,bb); bitmap.SetPixel(i,j,c1) bitmap为Bitmap(或 Image 类)的对象名字,(i,j)表示像素的位置,即表示第i列第

22、j行的像素,c1表示颜色值。,Visual C#.NET程序设计基础教程 第7章,颜色的逆反处理,只需把图像的三个颜色分量进行逆反处理。 其算法如下,设r,g,b分别表示源像素f(i,j)的三个颜色分量,rr,gg,bb表示图像处理后的像素g(i,j)三个颜色分量 rr=256-r; gg=256-g; bb=256-b;,Visual C#.NET程序设计基础教程 第7章,例:其程序如下: Graphics myGraphics = this.CreateGraphics(); Bitmap bitmap = new Bitmap(“eagle.jpg“); Color c = new Co

23、lor();for (int i=0;ibitmap.Width;i+)for (int j = 0; j bitmap.Height; j+)c = bitmap.GetPixel(i, j);Color c1 = Color.FromArgb(255 - c.R, 255 - c.G, 255 - c.B);bitmap.SetPixel(i, j, c1); myGraphics.DrawImage(bitmap, 150, 10);,Visual C#.NET程序设计基础教程 第7章,7.6.3 图像锐化,有时,需要突出图像的边缘信息,这需要图像的锐化,Visual C#.NET程序设

24、计基础教程 第7章,其算法如下: 设r1,g1,b1分别为图像源像素f(i,j)的红、绿、蓝三种颜色分量的值,r2,g2,b2分别为源图像像素f(i-1,j-1) 的红、绿、蓝三种颜色分量的值,rr,gg,bb为处理后的图像像素g(i,j) 的红、绿、蓝三种颜色分量的值。则: rr=r1+abs(r1-r2)*0.25 gg=g1+abs(g1-g2)*0.25 bb=b1+abs(b1-b2)*0.25 if (rr255)rr=255; if (gg255)gg=255 if (bb255)bb=255,Visual C#.NET程序设计基础教程 第7章,其程序如下: Graphics m

25、yGraphics = this.CreateGraphics(); Bitmap bitmap = new Bitmap(“eagle.jpg“);if (bitmap != null)Color c = new Color();Color c1=new Color();int rr,gg,bb;for (int i=1;i255)rr=255;if (gg255)gg=255;if (bb 255)bb = 255;Color c2 = Color.FromArgb(rr, gg,bb);bitmap.SetPixel(i, j, c2); myGraphics.DrawImage(bit

26、map, 150, 10);,Visual C#.NET程序设计基础教程 第7章,镶嵌处理,有时,我们希望图像马赛克的效果,Visual C#.NET程序设计基础教程 第7章,其算法如下: 首先把图像分成小块,每一小块的所有像素为此小块内源像素的均值。 我们把他分为3*3的小块,即: f(i,j)=(f(i,j)+f(i-1,j)+f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)+f(i+1,j+1)+f(i+1,j)+f(i+1,j-1)/9 g(i,j)= g(i-1,j) = g(i-1,j-1)= g(i,j-1)=g(i+1,j-1)=g(i+1,j+1)= g(i+1,

27、j)=g(i+1,j-1)=f(i,j),Visual C#.NET程序设计基础教程 第7章,生成灰度图像,彩色图像除了来表示之外,还可以用亮度、色差即Y、V来表示。其转换方法如下:,亮度为:,Visual C#.NET程序设计基础教程 第7章,其源代码如下: Graphics myGraphics = this.CreateGraphics(); Bitmap bitmap = new Bitmap(“eagle.jpg“);if (bitmap != null)Color c = new Color();Color c1 = new Color();int yy;for (int i =

28、0; i 255)yy = 255;Color cn = Color.FromArgb(yy, yy, yy);bitmap.SetPixel(i , j , cn); myGraphics.DrawImage(bitmap, 150, 10);,Visual C#.NET程序设计基础教程 第7章,图像的保存,用Image类的Save方法保存图像,其语句为: public void Save ( string filename) 例,下面语句把图像image1对象保存为文件名“c:myBitmap.bmp“tryif (image1 != null)image1.Save(“c:myBitmap.bmp“);catch(Exception)MessageBox.Show(“There was a problem saving the file.“ +“Check the file permissions.“); 也可以用SaveFileDialog类通过保存对话框获取文件名。其使用方法与打开文件对话框类似。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报