处理图像
图像处理基本场景可处理 FRDocument 对象内的图像,该对象即表示正在处理的文档。
打开图像
请执行下列操作之一将图像载入文档:
- 通过 Engine 对象的 CreateFRDocumentFromImage 方法创建 FRDocument 对象。
- 从文件添加图像到创建的 FRDocument 对象(通过 AddImageFile、AddImageFileFromMemory、AddImageFileFromStream、AddImageFileWithPassword 或 AddImageFileWithPasswordCallback 方法)。
所有这些方法会接收 PrepareImageMode 对象作为参数,该对象支持您指定图像预处理的不同参数。可调用IEngine::CreatePrepareImageMode 函数创建该对象,根据需要更改其属性,然后将其传递给需要它的函数。
ImageDocument 结构
文档页面通过 IFRPage::ImageDocument 属性提供对图像的访问。ABBYY FineReader Engine 中每个打开的图像,即所谓 "内部格式"的每个图像,由 ImageDocument 对象表示,该对象包括4个图像平面。每个图像平面对应一个 Image 对象:
- 黑白 平面。为源图像的黑白副本。副本歪斜或未歪斜取决于内部文件准备模式(请参见 IPrepareImageMode::CorrectSkewMode 属性的描述)。
- 灰色 平面。为源图像的灰色副本。副本歪斜或未歪斜取决于内部文件准备模式(请参见 IPrepareImageMode::CorrectSkewMode 对象的描述)。如果源图像为黑白色,则该页面与黑白平面一样。
- 彩色 平面。这是源图像的彩色副本。副本歪斜或未歪斜取决于内部文件准备模式(请参见 IPrepareImageMode::CorrectSkewMode 对象的描述)。如果源图像为黑白色,则该页面与黑白平面一样;如果为灰色,则该页面与灰色平面一样。
- 预览。用于在用户界面中显示预览图像的彩色小图像。它是否能以内部格式在文件中使用尚不确定。该预览图像是否可用取决于内部文件准备模式(请参见 IPrepareImageMode::CreatePreview 属性的描述)。
上述每个图像平面有自己的尺寸和分辨率。黑白、灰色和彩色图像的尺寸和分辨率一样。由于图像文档可能由歪斜的图像组成,ImageDocument 对象有一套坐标转换函数。借助 ICoordinatesConverter::ConvertCoordinates 函数将像素坐标从一个全尺寸图像平面转换到预览图像平面,然后再转换回来。黑白、灰色和彩色图像平面上的像素坐标相同。切记,识别函数会使用图像准备后收到的图像((因此,页面可能会歪斜)。
您可以通过 FRDocument 对象的 AddImageDocument 方法将已创建的 ImageDocument 对象添加到文档。
图像修改
有多种方式在打开图像后可对其进行修改:通过 ImageDocument 对象的方法,通过 ImageModification 对象,通过 FRPage 和 FRDocument 对象的方法。
这些对象提供许多 图像预处理 方法。这些方法有些只适合照片,有些则可适用于所有类型的文档。有些方法会提高识别质量,而有些只提升图像的视觉表现,但会降低识别质量。最后一种方法只可在识别后使用。请仔细阅读对每种方法的描述以了解该方法是否可用于您的场景。下面为我们建议的预处理方法使用顺序(请仅选用列表中适合您场景的方法):
- 提高识别质量:
- 剪裁图像(通过 ImageDocument 对象的 CropImage 方法)
- 增强局部对比度(通过 ImageDocument 对象的 EnhanceLocalContrast 方法)
- 调整方向(通过含必需参数的 ImageDocument 对象的 Transform 方法)
- 翻转或镜像(通过含必需参数的 ImageDocument 对象的 Transform 方法)
- 纠正几何畸变(通过FRPage 对象的 CorrectGeometricalDistortions 方法)
- 纠正歪斜(通过 ImageDocument 对象的 CorrectSkew 方法)
- 拆分跨页(通过 FRDocument 对象的 SplitPages 方法)
- 去除垃圾(通过 ImageDocument 对象的 RemoveGarbage 方法)
- 去除噪声(通过 ImageDocument 对象的 RemoveNoise 方法)
- 去除运动模糊(通过 ImageDocument对象的 RemoveMotionBlur 方法)
- 去除彩色对象(通过 ImageDocument 对象的 RemoveColorObjects 方法;如果需要指定色调和/或将移除的对象保存为单独的图像,则借助 RemoveColorObjectsEx 方法)
- 改善图像外观:
- 均衡亮度并且以白色为背景(通过ImageDocument 对象的 EqualizeBrightness 方法)
- 平滑图像纹理(通过 ImageDocument 对象的 SmoothTexture 方法)
- 抖动图像(通过 ImageDocument 对象的 DitherImage 方法)
请注意,所有这些预处理方法都应用于打开的图像。您可以在图像打开阶段对其做一些修改。请参见 PrepareImageMode 对象的描述进一步了解打开期间的图像预处理。
FineReader Engine 提供通过 ImageModification 对象附加图像编辑功能(翻转、拉伸等等)。请执行以下操作进行图像修改:
- 借助 Engine 对象的 CreateImageModification 方法创建一个 ImageModification 对象。
- 指定必需的参数。
- 调用将 ImageModification 对象作为输入参数的 IImageDocument::Modify 方法。只有在调用此方法时,更改才会生效。
- 使用 IImageDocument::SaveModified 方法保存更改。
重要事项! 图像修改直到 IImageDocument::SaveModified 方法被调用后才会得到保存。如果 ImageDocument 对象在调用该方法前被释放,则修改不会得到保存。
图像保存
您可以使用 Image 对象的 WriteToFile 将当前图像平面按指定格式保存到图像文件中。
请注意,虽然 ImageDocument 对象提供多种保存方法 (SaveTo,SaveToFile),但是这些方法不适用于将图像保存为外部格式的情况。这些方法将 ImageDocument 对象的内容保存为 ABBYY FineReader Engine 内部格式,任何外部程序无法对其进行查看。
ABBYY FineReader Engine 也提供将多个图像保存入单个图像文件的功能。通过 MultipageImageWriter 对象:
- 通过 Engine 对象的 CreateMultipageImageWriter 方法创建 MultipageImageWriter 对象。
- 通过 MultipageImageWriter 对象的 AddPage 方法将图像添加到多页图像文件的末尾。每个添加的图像都呈现为单个页面。
- 在使用新创建的图像文件之前,必须释放 MultipageImageWriter 对象的所有引用。
另请参阅
03.07.2024 8:50:25