求一简单的识别图片算法

骑着蜗牛去爬山 2016-02-23 10:47:37
领导不让用第三方sdk。原因:体积太大
网上也没有免费的识别接口
只能自己搞了

一张简单的图片(比较工整) 识别为String 求一快速高效的算法?
...全文
180 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2016-02-24
  • 打赏
  • 举报
回复
引用 9 楼 hjywyj 的回复:
[quote=引用 8 楼 lovesmiles 的回复:] 模板匹配最简单了
引用 4 楼 lianshaohua 的回复:
一般C/C++代码经修改后在android下运行是没有问题的
再问大神们一个菜鸟级问题 C++的不定长度数组怎么分配 伪代码是这样的 int* list; for (int i=0, i<10, i++){ if(满足一定条件){ //这里怎么给list往后连续分配内存?需要实现的如下 list.add(i) } }[/quote] 用std::list<T>行吗?如果数组不大且不频繁的插入删除,可以考虑std::vector<T>;当然也可以仿照这些代码写一个自己的动态数组
  • 打赏
  • 举报
回复
引用 8 楼 lovesmiles 的回复:
模板匹配最简单了
引用 4 楼 lianshaohua 的回复:
一般C/C++代码经修改后在android下运行是没有问题的
再问大神们一个菜鸟级问题 C++的不定长度数组怎么分配 伪代码是这样的 int* list; for (int i=0, i<10, i++){ if(满足一定条件){ //这里怎么给list往后连续分配内存?需要实现的如下 list.add(i) } }
赵4老师 2016-02-23
  • 打赏
  • 举报
回复
仅供参考:
Dim FPFN As String 'FullPathFileName
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim x As Integer
Dim x1 As Integer
Dim y As Integer
Dim w As Integer
Dim h As Integer
Dim b As Long
Dim a As Boolean
Dim nm(9) As String
Dim s As String
Dim r As String

Private Sub Form_Load()
    FPFN = Command$
    If Left(FPFN, 1) = Chr(34) Then FPFN = Mid(FPFN, 2)
    If Right(FPFN, 1) = Chr(34) Then FPFN = Left(FPFN, Len(FPFN) - 1)
    If Not FileExists(FPFN) Then
        logtofile "[" + FPFN + "] file not find!"
        End 'form
    End If
    nm(0) = _
    "--OOO---" + _
    "-OO-OO--" + _
    "-O---O--" + _
    "OO---OO-" + _
    "OO---OO-" + _
    "OO---OO-" + _
    "OO---OO-" + _
    "OO---OO-" + _
    "OO---OO-" + _
    "-O---O--" + _
    "-OO-OO--" + _
    "--OOO---"
    nm(1) = _
    "--OO----" + _
    "OOOO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "--OO----" + _
    "OOOOOO--"
    nm(2) = _
    "--OOOO--" + _
    "-O--OOO-" + _
    "O----OO-" + _
    "-----OO-" + _
    "-----OO-" + _
    "-----O--" + _
    "----OO--" + _
    "----O---" + _
    "---O----" + _
    "--O----O" + _
    "-OOOOOOO" + _
    "OOOOOOO-"
    nm(3) = _
    "--OOOO--" + _
    "-O--OOO-" + _
    "O----OO-" + _
    "-----OO-" + _
    "----OO--" + _
    "---OOO--" + _
    "----OOO-" + _
    "-----OO-" + _
    "-----OO-" + _
    "-----OO-" + _
    "OO--OO--" + _
    "OOOOO---"
    nm(4) = _
    "-----OO-" + _
    "-----OO-" + _
    "----OOO-" + _
    "---O-OO-" + _
    "--O--OO-" + _
    "--O--OO-" + _
    "-O---OO-" + _
    "O----OO-" + _
    "OOOOOOOO" + _
    "-----OO-" + _
    "-----OO-" + _
    "-----OO-"
    nm(5) = _
    "--OOOO--" + _
    "--OOOO--" + _
    "-O------" + _
    "-OOO----" + _
    "OOOOO---" + _
    "---OOO--" + _
    "----OO--" + _
    "-----O--" + _
    "-----O--" + _
    "-----O--" + _
    "O---O---" + _
    "OOOO----"
    nm(6) = _
    "-----OOO" + _
    "---OOO--" + _
    "--OO----" + _
    "-OO-----" + _
    "-O-OOO--" + _
    "OOO--OO-" + _
    "OO----OO" + _
    "OO----OO" + _
    "OO----OO" + _
    "OO----OO" + _
    "-OO--OO-" + _
    "--OOOO--"
    nm(7) = _
    "-OOOOOOO" + _
    "-OOOOOO-" + _
    "O-----O-" + _
    "-----O--" + _
    "-----O--" + _
    "-----O--" + _
    "----O---" + _
    "----O---" + _
    "---O----" + _
    "---O----" + _
    "---O----" + _
    "--O-----"
    nm(8) = _
    "--OOOO--" + _
    "-OO---OO" + _
    "OO----OO" + _
    "OO----OO" + _
    "-OOO-OO-" + _
    "--OOO---" + _
    "--OOOO--" + _
    "-O---OO-" + _
    "OO----OO" + _
    "OO----OO" + _
    "-OO--OO-" + _
    "--OOOO--"
    nm(9) = _
    "--OOOO--" + _
    "-OO--OO-" + _
    "OO----OO" + _
    "OO----OO" + _
    "OO----OO" + _
    "OO----OO" + _
    "-OO---OO" + _
    "--OOOOO-" + _
    "-----OO-" + _
    "----OO--" + _
    "---OO---" + _
    "OOO-----"
    Timer1.Enabled = True
End Sub
Private Function recognize() As String
    t = 3 '上面3行空白
    w = 8 '每个数字宽8像素
    h = 12 '每个数字高12像素
    x1 = 0
    r = "xxxx"
    On Error GoTo RERR
    Picture1.Picture = LoadPicture(FPFN)
    For n = 0 To 3
        Do
            For y = 0 To h - 1
                b = (Picture1.Point(x1, t + y)) And 255
                If b < 127 Then Exit For
            Next
            If y <= h - 1 Then Exit Do
            x1 = x1 + 1
            If x1 >= 70 Then
                Debug.Print "找不到下一个数字对应的x1"
                recognize = r
                Label1.Caption = r
                Exit Function
            End If
        Loop
        s = ""
        For y = 0 To h - 1
            For x = 0 To w - 1
                'Debug.Print " "; Right("00000000" + Hex(Picture1.Point(n * w + x, t + y)), 8);
                b = (Picture1.Point(x1 + x, t + y)) And 255
                'Debug.Print " "; Right("00" + Hex(b), 2);
                If b > 127 Then
                    Debug.Print "-";
                    s = s + "-"
                Else
                    Debug.Print "O";
                    s = s + "O"
                End If
                'Picture1.PSet (x1 + x, t + y), RGB(255, 0, 0)
            Next
            Debug.Print
        Next
        Debug.Print
        x1 = x1 + w
        For i = 0 To 9
            If nm(i) = s Then
                Mid(r, n + 1, 1) = CStr(i)
            End If
        Next
    Next
RERR:
    recognize = r
    Label1.Caption = r
    Exit Function
End Function

Private Sub Timer1_Timer()
Dim f As Integer
On Error Resume Next
        If LCase(Right(FPFN, 4)) = ".bmp" Then
            f = FreeFile()
            Open FPFN + ".txt" For Output As #f
            Print #f, recognize()
            Close #f
            End
        Else
            logtofile "[" + FPFN + "] is not .bmp file!"
        End If
End Sub
Public Function FileExists(filename) As Boolean
Dim msg As String
    On Error GoTo CheckError
        FileExists = (Dir(filename) <> "")
        Exit Function
CheckError:
    Const mnErrDiskNotReady = 71, mnErrDeviceUnavailable = 68
    If (Err.Number = mnErrDiskNotReady) Then
        msg = "将软盘插入驱动器 "
        msg = msg + ",然后关好驱动器门。"
        If MsgBox(msg, vbExclamation + vbOKCancel) = vbOK Then
            Resume
        Else
            FileExists = False
            Exit Function
        End If
    ElseIf Err.Number = mnErrDeviceUnavailable Then
        msg = "找不到: "
        msg = msg + filename
        MsgBox msg, vbExclamation
        FileExists = False
        Exit Function
    Else
        FileExists = False
        Exit Function
        'msg = "出现 #" + str(Err.Number)
        'msg = msg + " 意外错误: " + Err.Description
        'MsgBox msg, vbCritical
        'End'Form
    End If
    FileExists = False
    Exit Function
End Function

Private Sub logtofile(s As String)
Dim f As Integer
On Error Resume Next
    f = FreeFile()
    Open App.Path + "\numeye1.log" For Append As #f
    Print #f, Format(Now, "YYYY-MM-DD hh:mm:ss") + " " + s
    Close #f
End Sub
ryxcaixia 2016-02-23
  • 打赏
  • 举报
回复
github上的tesseract 开源 稳定 高效 你值得拥有
lm_whales 2016-02-23
  • 打赏
  • 举报
回复
先二值化,然后求相似度
ztenv 版主 2016-02-23
  • 打赏
  • 举报
回复
引用 2 楼 hjywyj 的回复:
[quote=引用 1 楼 lianshaohua 的回复:] 找个开源的,裁减一下就行了,
谢谢,1.网上那开源的没找到几个。 2.找到了也不一定能用,因为这玩意要用到Android中去的。[/quote] 如果有开源的可以试试,一般C/C++代码经修改后在android下运行是没有问题的
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
找个开源的,裁减一下就行了,
网上那些开源的大多数都借助了其他的库,那些库大多还无法集成到android里,这才是烦人的
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
找个开源的,裁减一下就行了,
谢谢,1.网上那开源的没找到几个。 2.找到了也不一定能用,因为这玩意要用到Android中去的。
ztenv 版主 2016-02-23
  • 打赏
  • 举报
回复
找个开源的,裁减一下就行了,
勤奋的小游侠 2016-02-23
  • 打赏
  • 举报
回复
模板匹配最简单了

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧