做淘宝网站代理,旅游景点网站模板大全,巴楚网站建设,凡科建站官网需要什么【算法介绍】
让我们开始讨论Deskeweing算法的一般概念。我们的主要目标是将旋转的图像分成文本块#xff0c;并确定它们的角度。为了让您详细了解我将使用的方法#xff1a; 照常-将图像转换为灰度。应用轻微的模糊以减少图像中的噪点。现在#xff0c;我们的目标是找到带…【算法介绍】
让我们开始讨论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.Imagenull){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