C#利用deskew算法实现图像文本倾斜校正

 更新时间:2024年01月03日 10:40:03   作者:FL1623863129  
这篇文章主要为大家详细介绍了C#如何利用deskew算法实现图像文本倾斜校正,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

算法介绍

让我们开始讨论Deskeweing算法的一般概念。我们的主要目标是将旋转的图像分成文本块,并确定它们的角度。为了让您详细了解我将使用的方法:

照常-将图像转换为灰度。

应用轻微的模糊以减少图像中的噪点。

现在,我们的目标是找到带有文本的区域,即图像的文本块。为了使文本块检测更容易,我们将反转并最大化图像的颜色,这将通过阈值化来实现。因此,现在文本变为白色(恰好为255,255,255白色),而背景为黑色(同样为0,0,0黑色)。

要查找文本块,我们需要合并该块的所有打印字符。我们通过膨胀(扩展白色像素)来实现。在X轴上使用较大的内核可以消除单词之间的所有空间,而在Y轴上使用较小的内核可以将彼此之间的一个块的行混合在一起,但保持文本块之间的较大间隔不变。

现在,用最小面积矩形包围轮廓的简单轮廓检测将形成我们需要的所有文本块。

确定倾斜角度的方法有很多种,但我们将坚持简单的方法-使用最大的文本块并使用其角度。

效果展示

实现部分代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace FIRC
{
    public partial class Form1 : Form
    {
        Bitmap src = null;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Multiselect = false;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
              
                src = new Bitmap(openFileDialog.FileName);
                pictureBox1.Image = src;
 
 
            }
 
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if(pictureBox1.Image==null)
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var gd = new gmseDeskew(src);
            var angle = gd.GetSkewAngle();
            var resultImage = gmseDeskew.RotateImage(src, angle);
            sw.Stop();
            this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";
            pictureBox2.Image = resultImage;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void btn_video_Click(object sender, EventArgs e)
        {
 
  
        }
    }
}

到此这篇关于C#利用deskew算法实现图像文本倾斜校正的文章就介绍到这了,更多相关C#图像文本校正内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C#中多态现象和多态的实现方法

    C#中多态现象和多态的实现方法

    这篇文章主要介绍了C#中多态现象和多态的实现方法,较为详细的分析了多态的原理与C#实现多态的方法,以及相关的注意事项,需要的朋友可以参考下
    2015-05-05
  • C# 单元测试全解析

    C# 单元测试全解析

    这篇文章主要介绍了C# 单元测试的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • C# using static让静态成员访问更简洁

    C# using static让静态成员访问更简洁

    在C#中,使用using static指令可以使静态成员的访问更加简洁和直接,这通常用于简化对静态类或静态方法的调用,特别是在频繁使用某个类的静态成员时,这篇文章给大家介绍C# using static让静态成员访问更简洁,感兴趣的朋友一起看看吧
    2026-05-05
  • 利用C#实现分割GIF图片

    利用C#实现分割GIF图片

    这篇文章主要为大家详细介绍了如何利用C#实现分割GIF图片的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C# 通过 inline-asm 解决嵌入x86汇编

    C# 通过 inline-asm 解决嵌入x86汇编

    此篇文章通过C#语言解决嵌入x86汇编,主要通过INline-asm方法来实现,下面我通过图片和代码的形式给大家分享下,需要的朋友可以参考下
    2015-07-07
  • C#中的委托介绍

    C#中的委托介绍

    这篇文章主要介绍了C#中的委托介绍,本文讲解了声明委托的方式、匿名方法、多播委托等内容,需要的朋友可以参考下
    2015-01-01
  • C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证

    C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证

    下面小编就为大家带来一篇C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证。小编觉得挺不错的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧
    2016-03-03
  • 使用C#实现DataSet与Excel的互相转换

    使用C#实现DataSet与Excel的互相转换

    在日常开发中,DataSet 是 .NET 程序中常用的数据容器,而 Excel 文件 则是数据交换和报表的常见格式,在实际业务中,经常需要将数据库查询结果保存到 Excel 文件,所以本文介绍了如何使用C#实现DataSet与Excel的互相转换,需要的朋友可以参考下
    2025-11-11
  • C#中?,??,??=,?: ,?. ,?[]各种问号的用法和说明详解

    C#中?,??,??=,?: ,?. ,?[]各种问号的用法和说明详解

    这篇文章主要介绍了C#中?、??、??=、?:、?.、?[]六种问号的用法和说明,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-11-11
  • c# 中间表的实现方式

    c# 中间表的实现方式

    本文主要介绍了c# 中间表的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03

最新评论