导航:首页 > 文字图片 > vb图片文字识别

vb图片文字识别

发布时间:2025-06-22 20:43:23

⑴ vb 部分截屏之后识别图片上的文字

主要是先要将图片转换为字节数组
'存放格式为(*, *, *),从左下角开始:
'第一维:0-蓝色分量,1-绿色分量,2-红色分量,
'第二维:列;第三维:行

全部步骤如下
1、用DibGet获取图片数据
2、用ColorToBlackAndWhite(或ColorToGray+OtsuColorToBlackAndWhite)将图片数据转换为黑白数据
3、用DibPut将数据恢复到一个PictureBox中
4、截取各个数字到单独的PictureBox中
5、将数字图片转换为图片数据,并与标准数据(0-9)对比,相似度最高的为准(比如与1的相似度为75%,与2的相似度为85%,则此数字为2)
有问题Hi
'图像输出的过程:
Public Sub DIBPut(ByVal IdDestination As Long, ByRef ImageData() As Byte)
Dim LineBytes As Long
Dim Width As Long, Height As Long

Width = UBound(ImageData, 2) + 1
Height = UBound(ImageData, 3) + 1

On Error GoTo ErrLine
Done = False

With bi24BitInfo.bmiHeader
.biWidth = Width
.biHeight = Height
LineBytes = ((Width * Bits + 31) And &HFFFFFFE0) \ 8
.biSizeImage = LineBytes * Height
End With
SetDIBitsToDevice IdDestination, 0, 0, Width, Height, 0, 0, 0, Height, ImageData(0, 0, 0), bi24BitInfo, 0

Done = True
Exit Sub
ErrLine:
MsgBox Err.Description
End Sub

'灰度处理SrcData(0 to 2, 0 to 宽度-1, 0 to 高度-1)
Public Sub ColorToGray(ByRef SrcData() As Byte, ByRef DestData() As Byte, _
Optional Left As Long = -1, Optional Top As Long = -1, _
Optional Right As Long = -1, Optional Bottom As Long = -1)
Dim i As Long, j As Long, k As Long
Dim red As Byte, green As Byte, blue As Byte
Dim Color As Long, newcolor As Long
Dim Width As Long, Height As Long

Width = UBound(SrcData, 2) + 1
Height = UBound(SrcData, 3) + 1
If Left = -1 Then Left = 0
If Top = -1 Then Top = 0
If Right = -1 Then Right = Width - 1
If Bottom = -1 Then Bottom = Height - 1

For j = Left To Right
For k = Height - Bottom - 1 To Height - Top - 1
blue = SrcData(0, j, k)
green = SrcData(1, j, k)
red = SrcData(2, j, k)
newcolor = CLng(0.299 * CDbl(red) + 0.585 * CDbl(green) + 0.114 * CDbl(blue)) '
newcolor = newcolor * 65793
red = newcolor Mod 256
green = newcolor / 256 Mod 256 '(9798 * RValue + 19235 * GValue + 3735 * BValue) / 32768
blue = newcolor / 256 / 256
DestData(0, j, k) = blue
DestData(1, j, k) = green
DestData(2, j, k) = red
Next
Next
End Sub

'黑白处理DestData(0 to 2, 0 to 宽度-1, 0 to 高度-1)
'图片最下面两行总是无法参与变换????只好将采集的图片区域向下多延伸2个像素
Public Sub ColorToBlackAndWhite(ByRef SrcData() As Byte, ByRef DestData() As Byte)
Dim i As Long, j As Long, k As Long
Dim red As Byte, green As Byte, blue As Byte
Dim Color As Long, newcolor As Long
Dim Width As Long, Height As Long

Width = UBound(SrcData, 2) + 1
Height = UBound(SrcData, 3) + 1

For j = 0 To Width - 1
For k = 0 To Height - 1
blue = SrcData(0, j, k)
green = SrcData(1, j, k)
red = SrcData(2, j, k)
newcolor = CLng(0.3 * CDbl(red) + 0.59 * CDbl(green) + 0.11 * CDbl(blue))
' newcolor = CLng(0.39 * CDbl(red) + 0.5 * CDbl(green) + 0.11 * CDbl(blue))
If newcolor > 127 Then newcolor = 255 Else newcolor = 0
red = newcolor
green = newcolor
blue = newcolor
DestData(0, j, k) = blue
DestData(1, j, k) = green
DestData(2, j, k) = red
Next
Next
End Sub

'黑白处理DestData(0 to 2, 0 to 宽度-1, 0 to 高度-1)
'图片最下面两行总是无法参与变换????只好将采集的图片区域向下多延伸2个像素
'OSTU算法可以说是自适应计算单阈值(用来转换灰度图像为二值图像)的简单高效方法。
'1978 OTSU年提出的最大类间方差法以其计算简单、稳定有效,一直广为使用。
Public Sub OtsuColorToBlackAndWhite(ByRef SrcData() As Byte, ByRef DestData() As Byte)
On Error Resume Next
Dim i As Long, j As Long, k As Long
Dim red As Byte, green As Byte, blue As Byte
Dim Color As Long, newcolor As Long
Dim Width As Long, Height As Long
Dim AllSum As Long, SumSmall As Long, SumBig As Long, PartSum As Long
Dim AllPixelNumber As Integer, PixelNumberSmall As Long, PixelNumberBig As Long
Dim ProbabilitySmall As Double, ProbabilityBig As Double, Probability As Double, MaxValue As Double
Dim BmpData() As Byte, Threshold As Byte
Dim Histgram(255) As Integer '图像直方图,256个点
Dim PixelNumber As Integer

Width = UBound(SrcData, 2) + 1
Height = UBound(SrcData, 3) + 1
PixelNumber = Width * Height

For i = 0 To Width - 1
For j = 0 To Height - 1
Histgram(SrcData(0, i, j)) = Histgram(SrcData(0, i, j)) + 1 '统计图像的直方图
Next
Next
For i = 0 To 255
AllSum = AllSum + i * Histgram(i) ' 质量矩
AllPixelNumber = AllPixelNumber + Histgram(i) ' 质量
Next
MaxValue = -1#
For i = 0 To 255
PixelNumberSmall = PixelNumberSmall + Histgram(i)
PixelNumberBig = AllPixelNumber - PixelNumberSmall
If PixelNumberBig = 0 Then Exit For
SumSmall = SumSmall + i * Histgram(i)
SumBig = AllSum - SumSmall
ProbabilitySmall = CDbl(SumSmall) / PixelNumberSmall
ProbabilityBig = CDbl(SumBig) / PixelNumberBig
' Probability = PixelNumberSmall * PixelNumberBig * (ProbabilityBig - ProbabilitySmall) * (ProbabilityBig - ProbabilitySmall)
Probability = PixelNumberSmall * ProbabilitySmall * ProbabilitySmall + PixelNumberBig * ProbabilityBig * ProbabilityBig
If Probability > MaxValue Then
MaxValue = Probability
Threshold = i
End If
Next

For j = 0 To Width - 1
For k = 0 To Height - 1
If SrcData(0, j, k) <= Threshold Then
DestData(0, j, k) = 0
DestData(1, j, k) = 0
DestData(2, j, k) = 0
Else
DestData(0, j, k) = 255
DestData(1, j, k) = 255
DestData(2, j, k) = 255
End If
Next
Next
End Sub

'迭代法 (最佳阀值法)
'(1)求出图象的最大灰度值和最小灰度值,分别记为Zl和Zk,令初始阈值为:T=(Zl+Zk)/2
'(2)根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值Z0和ZB:
'(3)令当前阈值Tk=(Z0+ZB)/2
'(4)若TK=TK+1, 则所得即为阈值,否则转2,迭代计算。
Public Sub (ByRef SrcData() As Byte, ByRef DestData() As Byte)
Dim i As Long, j As Long, k As Long
Dim red As Byte, green As Byte, blue As Byte
Dim Color As Long, newcolor As Long
Dim Width As Long, Height As Long
Dim PixelNumber As Integer
Dim Threshold As Integer, NewThreshold As Integer, MaxGrayValue As Integer
Dim MinGrayValue As Integer, MeanGrayValue1 As Integer, MeanGrayValue2 As Integer
Dim IP1 As Long, IP2 As Long, IS1 As Long, IS2 As Long
Dim Iteration As Long, Histgram(255) As Integer

Width = UBound(SrcData, 2) + 1
Height = UBound(SrcData, 3) + 1
PixelNumber = Width * Height

'求出图像中的最小和最大灰度值,并 计算阈值初值为
MaxGrayValue = 0: MinGrayValue = 255
For i = 0 To Width - 1
For j = 0 To Height - 1
Histgram(SrcData(0, i, j)) = Histgram(SrcData(0, i, j)) + 1 '统计图像的直方图
If MinGrayValue > SrcData(0, i, j) Then MinGrayValue = SrcData(0, i, j)
If MaxGrayValue < SrcData(0, i, j) Then MaxGrayValue = SrcData(0, i, j)
Next
Next

NewThreshold = (MinGrayValue + MaxGrayValue) / 2
While Threshold <> NewThreshold And Iteration < 100
Threshold = NewThreshold
'根据阈值将图像分割成目标和背景两部分,求出两部分的平均灰度值
For i = MinGrayValue To Threshold
IP1 = IP1 + Histgram(i) * i
IS1 = IS1 + Histgram(i)
Next
MeanGrayValue1 = CByte(IP1 / IS1)
For i = Threshold + 1 To MaxGrayValue
IP2 = IP2 + Histgram(i) * i
IS2 = IS2 + Histgram(i)
Next
MeanGrayValue2 = CByte(IP2 / IS2)
'求出新的阈值:
NewThreshold = (MinGrayValue + MaxGrayValue) / 2
Iteration = Iteration + 1
Wend

For j = 0 To Width - 1
For k = 0 To Height - 1
If SrcData(0, j, k) <= Threshold Then
DestData(0, j, k) = 0
DestData(1, j, k) = 0
DestData(2, j, k) = 0
Else
DestData(0, j, k) = 255
DestData(1, j, k) = 255
DestData(2, j, k) = 255
End If
Next
Next
End Sub

⑵ 怎样用vb识别图片中的阿拉伯数字

1、可以用脚本,你提供的图片位置上的数字问题。如果这个数字是类似验证码那一类的异性字符,那这脚本的难度就有点大。如果只是单纯的普通文字,那这脚本并不复杂。如果是桌面分辨率1024,768就如下,自己可以根据分辨率改。

2、:做字库1-9;2:固定X坐标上限和下限找字,找到了就点击,并保存Y坐标+偏移;3:循环步骤2,把步骤2中的Y上限修改为保存Y坐标+偏移。

3、先用大漠插件二值化处理文字,获得点阵做成字库。然后就能识字了。然后把识别的字转化为数值,存到变量A,B然后判断。如果A=B则。。

4、按键精灵里用大漠插件识别数字非常好用,将数字载入数组,调用即可。比如找到4后,将4放入第一个数组。再识别第二个数,比如2再用一个自定义函数来调用两个数组,使他们相加。最后调用这个自定义函数就是最终要的目的了。

⑶ vb中的换行符号是什么

指的是一种加在文字最后位置的特殊字符,在换行字符的下一个字符将会出现在下一行。

换行字符可以看作是行的结束符,也可以看作行之间的分隔符,这两种处理方式之间存在一些歧义。如果换行字符被当作分隔符,那么文件的最后一行就不需要再有换行字符。但是多数系统的做法是在最后一行的后面也加上一个换行字符,也就是把换行字符看作是行的结束符。

这样的程序在处理末行没有换行字符的文件时,可能会存在问题。相反地,有的程序把换行符看作分隔符,就会把最末尾的换行字符看作是新行的开始,也就是多出了一个空行。

(3)vb图片文字识别扩展阅读

换行符的类别

C语言

" "

C语言中的换行符是" ",就是输入完一行内容后,光标转到下一行的起始位置 。

例如:

printf("first line ");

printf("second line ");

C++语言

"endl"

C++语言中的换行符是endl。

例如:

cout<<"这是换"<<endl<<"行符";

将显示输出:

这是换

行符

word换行符

word换行符是一种换行符号,它的作用是换行显示,但是它不是真正的段落标记,它的换行不是真正意义上的重起一段,因此被换行符分割的文字其实仍然还是一个段落中的,word中基于段落的所有操作都是不会识别换行符为段落结尾的。

VB语言

在VB中,若命令太长,在一行输入不方便,可以在代码后输入空格和下划线再换行。

例如:

Private Declare Function mciSendString Lib winmm. _

dll Alias mciSendStringA (ByVal lpstrCommand As String, _

ByVal lpstrReturnString As String, ByVal uReturnLength _

As Long, ByVal hwndCallback As Long) As Long。

⑷ vb编程识别图片中文字

识别图片里文字的方法,通常称为OCR(Optical Character Recognition,光学字符识别),需要利用非常复杂的模式识别算法才能实现。自己用VB开发OCR程序工作量太大。
可以考虑采用OCR插件,即在电脑上安装OCR控件,然后在VB程序中调用该控件。如WPS,紫光、汉王的OCR系统都带有可调用的控件,但都比较大,而且有使用限制。我曾经用过一个免费的91OCR控件,识别效果还马马虎虎可以。

阅读全文

与vb图片文字识别相关的资料

热点内容
如何把图片修成圆的但不截 浏览:33
清翡翠观音高清图片 浏览:723
女生殖器的图片搜索 浏览:963
简单卡通图片简笔画可爱 浏览:661
两白金男生的图片 浏览:704
如何将图片分辨率调清晰 浏览:962
人物萌图片大全可爱 浏览:730
待办事项可爱图片 浏览:4
纯文字排版图片 浏览:689
动漫福利漫画图片大全 浏览:357
发型内扣中长图片2016 浏览:726
微信语音和图片同步怎么办 浏览:145
可爱棒棒糖圆珠笔的笔帽图片 浏览:900
长方形女生图片 浏览:262
png图片如何打开 浏览:652
车怎么充电图片 浏览:255
男生帅气百搭图片 浏览:992
自拍图片女生胸 浏览:75
猫耳朵卡通图片男生 浏览:431
vb图片文字识别 浏览:909