C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正
算法介紹
讓我們開(kāi)始討論Deskeweing算法的一般概念。我們的主要目標(biāo)是將旋轉(zhuǎn)的圖像分成文本塊,并確定它們的角度。為了讓您詳細(xì)了解我將使用的方法:
照常-將圖像轉(zhuǎn)換為灰度。
應(yīng)用輕微的模糊以減少圖像中的噪點(diǎn)。
現(xiàn)在,我們的目標(biāo)是找到帶有文本的區(qū)域,即圖像的文本塊。為了使文本塊檢測(cè)更容易,我們將反轉(zhuǎn)并最大化圖像的顏色,這將通過(guò)閾值化來(lái)實(shí)現(xiàn)。因此,現(xiàn)在文本變?yōu)榘咨ㄇ『脼?55,255,255白色),而背景為黑色(同樣為0,0,0黑色)。
要查找文本塊,我們需要合并該塊的所有打印字符。我們通過(guò)膨脹(擴(kuò)展白色像素)來(lái)實(shí)現(xiàn)。在X軸上使用較大的內(nèi)核可以消除單詞之間的所有空間,而在Y軸上使用較小的內(nèi)核可以將彼此之間的一個(gè)塊的行混合在一起,但保持文本塊之間的較大間隔不變。
現(xiàn)在,用最小面積矩形包圍輪廓的簡(jiǎn)單輪廓檢測(cè)將形成我們需要的所有文本塊。
確定傾斜角度的方法有很多種,但我們將堅(jiān)持簡(jiǎn)單的方法-使用最大的文本塊并使用其角度。
效果展示

實(shí)現(xiàn)部分代碼
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 = "耗時(shí)" + sw.Elapsed.TotalSeconds + "秒";
pictureBox2.Image = resultImage;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_video_Click(object sender, EventArgs e)
{
}
}
}到此這篇關(guān)于C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正的文章就介紹到這了,更多相關(guān)C#圖像文本校正內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中多態(tài)現(xiàn)象和多態(tài)的實(shí)現(xiàn)方法
這篇文章主要介紹了C#中多態(tài)現(xiàn)象和多態(tài)的實(shí)現(xiàn)方法,較為詳細(xì)的分析了多態(tài)的原理與C#實(shí)現(xiàn)多態(tài)的方法,以及相關(guān)的注意事項(xiàng),需要的朋友可以參考下2015-05-05
C# using static讓靜態(tài)成員訪(fǎng)問(wèn)更簡(jiǎn)潔
在C#中,使用using static指令可以使靜態(tài)成員的訪(fǎng)問(wèn)更加簡(jiǎn)潔和直接,這通常用于簡(jiǎn)化對(duì)靜態(tài)類(lèi)或靜態(tài)方法的調(diào)用,特別是在頻繁使用某個(gè)類(lèi)的靜態(tài)成員時(shí),這篇文章給大家介紹C# using static讓靜態(tài)成員訪(fǎng)問(wèn)更簡(jiǎn)潔,感興趣的朋友一起看看吧2026-05-05
C# 通過(guò) inline-asm 解決嵌入x86匯編
此篇文章通過(guò)C#語(yǔ)言解決嵌入x86匯編,主要通過(guò)INline-asm方法來(lái)實(shí)現(xiàn),下面我通過(guò)圖片和代碼的形式給大家分享下,需要的朋友可以參考下2015-07-07
C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證
下面小編就為大家?guī)?lái)一篇C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家。給大家一個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-03-03
使用C#實(shí)現(xiàn)DataSet與Excel的互相轉(zhuǎn)換
在日常開(kāi)發(fā)中,DataSet 是 .NET 程序中常用的數(shù)據(jù)容器,而 Excel 文件 則是數(shù)據(jù)交換和報(bào)表的常見(jiàn)格式,在實(shí)際業(yè)務(wù)中,經(jīng)常需要將數(shù)據(jù)庫(kù)查詢(xún)結(jié)果保存到 Excel 文件,所以本文介紹了如何使用C#實(shí)現(xiàn)DataSet與Excel的互相轉(zhuǎn)換,需要的朋友可以參考下2025-11-11
C#中?,??,??=,?:?,?.?,?[]各種問(wèn)號(hào)的用法和說(shuō)明詳解
這篇文章主要介紹了C#中?、??、??=、?:、?.、?[]六種問(wèn)號(hào)的用法和說(shuō)明,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-11-11

