首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#]基于deskew算法实现图像文本倾斜校正

[C#]基于deskew算法实现图像文本倾斜校正

作者头像
云未归来
发布2025-07-20 14:06:27
发布2025-07-20 14:06:27
10100
代码可运行
举报
运行总次数:0
代码可运行

【算法介绍】

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

如何使用OpenCV自动校正文本图像
如何使用OpenCV自动校正文本图像
  1. 照常-将图像转换为灰度。
  2. 应用轻微的模糊以减少图像中的噪点。
  3. 现在,我们的目标是找到带有文本的区域,即图像的文本块。为了使文本块检测更容易,我们将反转并最大化图像的颜色,这将通过阈值化来实现。因此,现在文本变为白色(恰好为255,255,255白色),而背景为黑色(同样为0,0,0黑色)。
  4. 要查找文本块,我们需要合并该块的所有打印字符。我们通过膨胀(扩展白色像素)来实现。在X轴上使用较大的内核可以消除单词之间的所有空间,而在Y轴上使用较小的内核可以将彼此之间的一个块的行混合在一起,但保持文本块之间的较大间隔不变。
  5. 现在,用最小面积矩形包围轮廓的简单轮廓检测将形成我们需要的所有文本块。
  6. 确定倾斜角度的方法有很多种,但我们将坚持简单的方法-使用最大的文本块并使用其角度。

【效果展示】

【实现部分代码】

代码语言:javascript
代码运行次数:0
运行
复制
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)
        {
 
  
        }
    }
}

【视频演示】

bilibili.com/video/BV1x94y1g7uT 【源码下载】

https://download.csdn.net/download/FL1623863129/88694134 【测试环境】

VS2019

netframework4.7.2(支持netframwork2.0以上都可以) 【参考文献】

[1] guanshanw.com/post/30887.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档