使用 C# 进行图像处理中的倾斜校正

图像处理中的歪斜校正是图像优化的一项任务。在计算机视觉中,我们需要正确定位我们的相机和传感器,但这通常会导致较大的失真。同样,使用扫描仪扫描时,有时几乎不可能对齐。因此,扫描的图像和照片会有轻微的歪斜(倾斜)。在本文中,我们将学习如何使用 C# 在图像处理中执行歪斜校正。

本文将涵盖以下主题:

  1. C#歪斜校正图像处理API
  2. 检测图像倾斜角度
  3. 自动歪斜校正
  4. 使用预处理滤波器进行自动歪斜校正
  5. 通过自动倾斜校正识别图像文本
  6. 手动歪斜校正
  7. 使用预处理过滤器进行手动歪斜校正

C# 歪斜校正图像处理 API

对于偏斜校正,我们将使用 Aspose.OCR for .NET API。该 API 允许对扫描的图像、智能手机照片、屏幕截图、图像区域和扫描的 PDF 执行 OCR。它可以将识别的文本结果保存为流行的文档格式

下载 API 的 DLL 或使用 NuGet 安装它。

PM> Install-Package Aspose.OCR

在 C# 中检测图像倾斜角度

API 提供了 CalculateSkew(string) 方法,用于计算提供的源图像的倾斜角度。我们可以通过以下步骤轻松检测文本图像的倾斜角度:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 调用CalculateSkew() 方法。它将图像路径作为参数。
  3. 最后,显示计算的倾斜角。

以下示例代码显示了如何在 C# 中计算图像的倾斜角度。

// 此代码示例演示如何计算图像的倾斜角度。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 计算倾斜角
float skew = recognitionEngine.CalculateSkew("C:\\Files\\OCR\\source.png");

// 显示角度
Console.WriteLine($"Skew angle: {skew:N1}°");
在 C# 中检测图像倾斜角度

源图像。

Skew angle: 5.8°

C# 中的自动倾斜校正

对于自动歪斜校正,我们可以按照以下步骤在识别设置中启用 RecognitionSettings.AutoSkew 属性:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 接下来,初始化 RecognitionSettings 类的对象。
  3. 然后,将 AutoSkew 属性设置为 true。
  4. 之后,使用源图像和 RecognitionSettings 对象调用 RecognizeImage() 方法。
  5. 最后,显示识别的文本。

以下示例代码显示了如何在 C# 中应用自动倾斜校正。

// 此代码示例演示如何应用自动歪斜校正。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 在识别设置中启用自动纠偏
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.AutoSkew = true;

// 识别图像
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);

// 显示识别的文本
Console.WriteLine(result.RecognitionText);

在 C# 中使用预处理过滤器进行自动倾斜校正

或者,我们可以应用 AutoSkew 预处理过滤器进行自动歪斜校正,并按照以下步骤保存校正后的图像:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 接下来,初始化 PreprocessingFilter 类的对象。
  3. 然后,添加 AutoSkew() 过滤器。
  4. 之后,调用 PreprocessImage() 方法对源图像应用滤镜。
  5. 最后,保存校正后的图像。

以下示例代码显示了如何在 C# 中使用预处理过滤器应用自动歪斜校正。

// 此代码示例演示如何使用预处理过滤器应用自动歪斜校正并保存校正后的图像。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 添加纠偏过滤器
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.AutoSkew());

// 将预处理后的图像保存到文件
using (MemoryStream ms = recognitionEngine.PreprocessImage("C:\\Files\\OCR\\source.png", filters))
{
    using (FileStream fs = new FileStream("C:\\Files\\OCR\\result.png", FileMode.Create, FileAccess.Write))
    {
        ms.WriteTo(fs);
    }
}
在 C# 中使用过滤器自动校正歪斜

在 C# 中使用过滤器自动校正歪斜。

在 C# 中使用自动倾斜校正识别图像文本

我们可以按照以下步骤应用 AutoSkew 预处理过滤器并识别图像文本:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 接下来,初始化 PreprocessingFilter 类的对象。
  3. 然后,添加 AutoSkew() 过滤器。
  4. 同时,创建 RecognitionSettings 类的实例。
  5. 接下来,将过滤器分配给 PreprocessingFilters 属性。
  6. 之后,使用源图像和 RecognitionSettings 对象调用 RecognizeImage() 方法。
  7. 最后,显示识别的文本。

以下示例代码显示了如何应用自动歪斜校正和识别 C# 中的文本。

// 此代码示例演示如何使用预处理过滤器应用自动歪斜校正并识别图像。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 添加纠偏过滤器
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.AutoSkew());

// 将预处理过滤器附加到识别设置
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.PreprocessingFilters = filters;

// 识别图像
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);

// 显示结果
Console.WriteLine(result.RecognitionText);

C# 中的手动倾斜校正

对于手动歪斜校正,我们可以通过在识别设置中指定 SkewAngle 属性手动定义歪斜角度,步骤如下:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 接下来,初始化 RecognitionSettings 类的对象。
  3. 然后,设置 SkewAngle 属性。
  4. 之后,使用源图像和 RecognitionSettings 对象调用 RecognizeImage() 方法。
  5. 最后,显示识别的文本。

以下示例代码显示了如何在 C# 中应用手动歪斜校正。

// 此代码示例演示如何应用手动歪斜校正。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 手动设置倾斜角度
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.SkewAngle = 6;

// 识别图像
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);

// 显示结果
Console.WriteLine(result.RecognitionText);

在 C# 中使用预处理过滤器进行手动倾斜校正

我们还可以通过使用 Rotate 预处理过滤器将图像旋转到指定的度数来手动定义倾斜角度。

请按照以下步骤手动应用歪斜校正:

  1. 首先,创建 AsposeOCR 类的实例。
  2. 接下来,初始化 PreprocessingFilter 类的对象。
  3. 然后,添加 AutoSkew() 过滤器。
  4. 同时,创建 RecognitionSettings 类的实例。
  5. 接下来,将过滤器分配给 PreprocessingFilters 属性。
  6. 之后,使用源图像和 RecognitionSettings 对象调用 RecognizeImage() 方法。
  7. 最后,显示识别的文本。

以下示例代码显示了如何在 C# 中使用预处理过滤器应用手动歪斜校正。

// 此代码示例演示如何应用手动歪斜校正和识别图像文本。
// 创建 AsposeOcr 的实例
AsposeOcr recognitionEngine = new AsposeOcr();

// 将图像逆时针旋转 90 度
Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
filters.Add(Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter.Rotate(-90));

// 将预处理后的图像保存到文件以进行调试
using (MemoryStream ms = recognitionEngine.PreprocessImage("C:\\Files\\OCR\\source.png", filters))
{
    using (FileStream fs = new FileStream("C:\\Files\\OCR\\result.png", FileMode.Create, FileAccess.Write))
    {
        ms.WriteTo(fs);
    }
}

// 将预处理过滤器附加到识别设置
RecognitionSettings recognitionSettings = new RecognitionSettings();
recognitionSettings.PreprocessingFilters = filters;

// 识别图像
RecognitionResult result = recognitionEngine.RecognizeImage("C:\\Files\\OCR\\source.png", recognitionSettings);

// 显示结果
Console.WriteLine(result.RecognitionText);

获得免费评估许可证

您可以获得免费的临时许可证 试用 Aspose.OCR for .NET,不受评估限制。

结论

在本文中,我们学习了如何:

  • 执行 OCR 并识别图像上的文本;
  • 应用过滤器和处理图像;
  • 使用识别设置;
  • 使用 C# 保存校正后的图像。

除了使用 C# 进行图像处理中的歪斜校正外,您还可以使用 文档 了解更多关于 Aspose.OCR for .NET API 的信息。如有任何歧义,请随时在我们的 免费支持论坛 上与我们联系。

也可以看看