LeadTools中文图像处理教程(2):图像的几何变换

发布时间:2014/09/13 00:09 发布者:Linda

返回博客中心

 

  • LeadTools中文图像处理教程(1):更改数据格式 点击进入
  • LeadTools中文图像处理教程(2):图像的几何变换 点击进入
  • LeadTools中文图像处理教程(3):倾斜校正 点击进入
  • LeadTools中文图像处理教程(4):调整图像亮度和对比度 点击进入
  • LeadTools中文图像处理教程(5):图像去噪 点击进入
  • LeadTools中文图像处理教程(6):检测和增强边缘、线条 点击进入
  • LeadTools中文图像处理教程(7):应用艺术效果 点击进入
  • LeadTools中文图像处理教程(8):调整色彩 点击进入
  • LeadTools中文图像处理教程(9):添加图像至另一个图像 点击进入
  • LeadTools中文图像处理教程(10):窗位(仅用于Medical) 点击进入
  • LeadTools中文图像处理教程(11):对比图像 点击进入

 

几何变换包括缩放、裁剪、旋转、翻转或反转图像。一些几何变换方法主要适用于文档图像。例如,DeskewCommand可以自动拉直扫描的文档。对于任何一种图像的缩放,SizeCommand类提供了最新的选项,但是您也可以选择可用的低级方法替代。

LEADTOOLS还提供了用于无损翻转、旋转、反转的转换方法。然而,只支持特定的文件格式。这个方法比加载一个图像,使用RotateCommandFlipCommand转换它然后保存的效果好。在文件中处理文件、编写任何更新的标记时,使用了CodecsTransformMarkerCallback回调。

 

本文概览:

1 LeadTools“图像几何变换”的高级缩放类介绍

2 LeadTools“图像几何变换”的高级裁剪类介绍

3 LeadTools“图像几何变换”的其他高级变换类介绍

4 LeadTools“图像几何变换”的低级缩放方法介绍

 

下面简单为大家介绍相关类和方法,并附有相关代码片段:

1. 高级缩放类

 

ResizeCommand

调整已有图像的大小,并将调整后的图像设为目标图像,原始图像不变。

SizeCommand

将图像调整到一个新的宽和高。

 

以下为使用ResizeCommand 类的代码片段(注:Resize.rar):

  1: RasterCodecs codecs = new RasterCodecs();
  2: string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3: string destFileName = Path.Combine(ImagesPath.Path, "ResizeCommand.bmp");
  4: 
  5: // 从磁盘加载原始图像
  6: RasterImage srcImage = codecs.Load(srcFileName);
  7: 
  8: // 创建目标图像
  9: RasterImage destImage = new RasterImage(
 10:    RasterMemoryFlags.Conventional,
 11:    100,
 12:    100,
 13:    srcImage.BitsPerPixel,
 14:    srcImage.Order,
 15:    srcImage.ViewPerspective,
 16:    srcImage.GetPalette(),
 17:    IntPtr.Zero,
 18:    0);
 19: 
 20: // 将原始图像调整大小
 21: ResizeCommand command = new ResizeCommand();
 22: command.DestinationImage = destImage;
 23: command.Flags = RasterSizeFlags.Bicubic;
 24: command.Run(srcImage);
 25: 
 26: // 将调整后的图像保存至磁盘
 27: codecs.Save(destImage, destFileName, RasterImageFormat.Bmp, 24);
 28: 
 29: // 清理
 30: srcImage.Dispose();
 31: destImage.Dispose();
 32: codecs.Dispose();

 

以下为使用SizeCommand类的代码片段(注:Resize.rar):

  1:    RasterCodecs codecs = new RasterCodecs();
  2:    string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3:    string destFileName = Path.Combine(ImagesPath.Path,"SizeCommand.bmp");
  4: 
  5:    // 从磁盘加载原始图像
  6:    RasterImage image = codecs.Load(srcFileName);
  7:    SizeCommand command = new SizeCommand();
  8:    command.Width = 128;
  9:    command.Height = 128;
 10:    command.Flags = RasterSizeFlags.Resample;
 11:    command.Run(image);
 12: 
 13:    // 将图像保存至磁盘
 14:    codecs.Save(image, destFileName, RasterImageFormat.Bmp, 8);
 15: 
 16:    // 清理
 17:    image.Dispose();
 18:    codecs.Dispose();
 

2. 高级裁剪类

 

 

AutoCropCommand

 

裁剪当前图像,删除边缘的空白区域

 

AutoCropRectangleCommand

 

若使用了AutoCropCommand类,可以使用此类获取裁剪时使用的矩形。

 

CropCommand

 

使用定义好的矩形裁剪图像。

 

以下为使用AutoCropCommand类的代码片段(注:CropCommand.rar):

  1: // 加载图像
  2: RasterCodecs codecs = new RasterCodecs();
  3: codecs.ThrowExceptionsOnInvalidImages = true;
  4: RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"));
  5: 
  6: // 准备command
  7: AutoCropCommand command = new AutoCropCommand();
  8: 
  9: //在误差20内自动裁剪图像
 10: command.Threshold = 20;
 11: 
 12: command.Run(image);

 

以下为使用AutoCropRectangleCommand类的代码片段(注:CropCommand.rar):

  1:    //加载图像
  2:    RasterCodecs codecs = new RasterCodecs();
  3:    codecs.ThrowExceptionsOnInvalidImages = true;
  4: 
  5:    RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"));
  6: 
  7:    // 准备command
  8:    AutoCropRectangleCommand command = new AutoCropRectangleCommand();
  9:    command.Threshold = 0;
 10:    command.Run(image);
 11:    MessageBox.Show("左 = " + command.Rectangle.Left.ToString() + "\n" +
 12:          "上 = " + command.Rectangle.Top.ToString() + "\n" +
 13:          "右 = " + command.Rectangle.Right.ToString() + "\n" +
 14:          "下 = " + command.Rectangle.Bottom.ToString());

 

以下为使用CropCommand类的代码片段(注:CropCommand.rar):

  1:    RasterCodecs codecs = new RasterCodecs();
  2:    string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3:    string destFileName = Path.Combine(ImagesPath.Path, "CropCommand.bmp");
  4: 
  5:    //从磁盘中加载原始图像
  6:    RasterImage image = codecs.Load(srcFileName);
  7: 
  8:    // 从图像的各边裁剪掉100像素
  9:    CropCommand command = new CropCommand();
 10:    command.Rectangle = new LeadRect(
 11:       100,
 12:       100,
 13:       image.Width - 100,
 14:       image.Height - 100);
 15:    command.Run(image);
 16: 
 17:    // 将其保存至磁盘
 18:    codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24);
 19: 
 20:    // 清理
 21:    image.Dispose();
 22:    codecs.Dispose();

 

3. 其他的高级变换类 

 

类名

说明

BendCommand

以轴心点为中心,沿着弯曲的平面扭曲当前图像。这个中心点必须定义在图像内或区域内。若图像有一个区域,变换只应用于此区域。

这个类在Raster Pro及以上工具包中可用。

ChangeViewPerspectiveCommand

旋转和翻转图像数据,以获取想要的查看视角。

 

CylinderCommand

绕着一个圆柱扭曲图像。此命令只在Raster Pro及以上工具包中可用。

 

DeskewCommand

旋转特定的图像并拉直。

 

FlipCommand

从顶端到底端或从左到右翻转RasterImage

 

FreeHandShearCommand

使用振幅数组通过所画的波形剪切图像。此命令仅在Raster Pro及以上工具包中可用。

 

FreeHandWaveCommand

通过振幅数组和旋转角度中指定的波形,扭曲图像。此命令仅在Raster Pro及以上工具包中可用。

FreePlaneBendCommand

将图像包裹在一个以曲线塑造的3D平面上。此命令只在Raster Pro及以上工具包中可用。

原图:

clip_image002

应用此效果后:

clip_image004

FreeRadialBendCommand

将图像按着曲线塑造的3D平面的半径包裹。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image006

应用此效果后:

clip_image008

ImpressionistCommand

使图片看起来像出自一个印象派画家之手。此命令只在Raster Pro及以上工具包中可用。

PlaneBendCommand

将图像沿着Z轴放置在平行平面,并朝着中心点弯曲。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image010

使用后的效果:

clip_image012

PlaneCommand

将图像沿着Z轴放置在平行平面。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image013

使用后的效果:

clip_image015

 

PolarCommand

将图像从矩形转换为极坐标,反之亦然。此命令只在Raster Pro及以上工具包中可用。

 

PunchCommand

通过将图像向中心挤压或从中心向外扩展来弯曲图像。此命令只在Raster Pro及以上工具包中可用。

 

RadialBlurCommand

通过绕着中心点旋转像素模糊图像。此命令只在Raster Pro及以上工具包中可用。

 

RadialWaveCommand

使用从中心辐射的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。

 

RippleCommand

在同心圆内扭曲图像。此命令只在Raster Pro及以上工具包中可用。

 

RotateCommand

以指定的度数旋转图像。此命令只在Raster Pro及以上工具包中可用。

 

RotateViewPerspective 方法

通过改变ViewPerspective旋转RasterImage

 

ShearCommand

以平行四边形的方式移动图像的角。

 

SphereCommand

绕着一个3D球形,扭曲图像。此命令只在Raster Pro及以上工具包中可用。

 

SwirlCommand

根据旋转角度旋转图像,以产生漩涡的模式。此命令只在Raster Pro及以上工具包中可用。

 

RasterCodecs.Transform 方法

可完成特定格式的无损转换。

TunnelCommand

沿着Z轴在隧道中放置图像。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image017

使用后的效果:

clip_image019

 

WaveCommand

使用特定角度特定波形的两个垂直波扭曲图像。此命令只在Raster Pro及以上工具包中可用。

 

WindCommand

创建细线,以特定的角度引导它,作用于被影响的图像上。此命令只在Raster Pro及以上工具包中可用。

 

ZoomBlurCommand

从特定中心点开始沿着半径线模糊图像。此命令只在Raster Pro及以上工具包中可用。

 

ZoomWaveCommand

使用从特定中心放大的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。

4. 低级缩放方法

 

ResizeBuffer 方法

使用Start方法将缓冲区调整为指定的新大小。

Start 方法

ResizeBuffer(Byte[],Int32,Int32,Int32)方法建立信息。

Stop 方法

清除Start方法中所有的数据变量和缓冲区。

 

DEMO下载:

Resize.rar (348.00 kb) 

CropCommand.rar (317.39 kb)

 

DEMO提供了LeadTools调整图像大小、裁剪图像的全部代码。为了运行这些代码,你需要下载LeadTools全功能试用版自己试试。

 

LeadTools试用版下载

了解LeadTools产品更多特性

若您在使用LeadTools的过程中遇到任何问题,欢迎在葡萄城开发者社区LeadTools板块提问,我们的专业技术团队期待您的到来!

点击查看更多LeadTools使用教程、博文


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网