在好例子网,分享、交流、成长!
您当前所在位置:首页ASP 开发实例VB编程 → 图片比对程序(找出图片的不同之处)

图片比对程序(找出图片的不同之处)

VB编程

下载此实例
  • 开发语言:ASP
  • 实例大小:210.57M
  • 下载次数:30
  • 浏览次数:248
  • 发布时间:2019-07-28
  • 实例类别:VB编程
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 程序 图片

实例介绍

【实例简介】根据像素点,进行图片的比对, 找出差异处,有灰度图与直方图

【实例截图】

from clipboard


该项目主要包含以下文件:

 Form1.frm
 Form1.frx
 Form1.log
 Form2.frm
 Form3.frm
 Form4.frm
 Form5.frm
 frmAbout.frm
 frmAbout.frx
 frmSplash.frm
 frmSplash.frx
 MSCHRT20.oca*
 MSCHRT20.OCX*
 MSCHRT207w01.dll
 MSSCCPRJ.SCC
 Project1.vbp
 Project1.vbw

【核心代码】

Private Type BITMAPFILEHEADER '14 bytes
        bfType As Integer
        bfSize As Long
        bfReserved1 As Integer
        bfReserved2 As Integer
        bfOffBits As Long
End Type

Private Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
End Type

Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type

Private Type PALETTEENTRY
        peRed As Byte
        peGreen As Byte
        peBlue As Byte
        peFlags As Byte
End Type

Dim BF As BITMAPFILEHEADER
Dim BI As BITMAPINFOHEADER
Dim pixcolor() As Byte
Dim newcolor() As Integer
Dim light() As Integer
Dim color() As RGBQUAD
Dim num As Byte

Private Sub Form_Load()
        Form1.Hide
        frmAbout.Show
        frmAbout.SetFocus
End Sub

Private Sub txsr_Click()
On Error Resume Next
         Dim Counter As Integer
         ProgressBar1.Min = 0
         ProgressBar1.max = 10000
         ProgressBar1.Visible = True
         ProgressBar1.Value = ProgressBar1.Min
         For Counter = 0 To 10000
           ProgressBar1.Value = Counter
         Next Counter
         ProgressBar1.Visible = False
         ProgressBar1.Value = ProgressBar1.Min
         CommonDialog1.ShowOpen
         Picture1.Picture = LoadPicture(CommonDialog1.FileName)
         sb.Enabled = False
         yz.Enabled = False
         ezh.Enabled = False
         bytq.Enabled = False
         zft.Enabled = False
         jg.Enabled = False
End Sub

Private Sub drsj_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, n, t As Integer
        Form1.MousePointer = 11
        Form1.Enabled = False
        Open Form1.Picture1.Picture For Binary As #1
        Get #1, , BF
        Get #1, , BI
        ReDim pixcolor(BI.biHeight, BI.biWidth, 2) As Byte
        Select Case BI.biBitCount
               Case 1
               ReDim color(2) As RGBQUAD
               Get #1, , color(0)
               Get #1, , color(1)
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
               Next i
               
               Case 4
               ReDim color(16) As RGBQUAD
               For n = 0 To 15
               Get #1, , color(n)
               Next n
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
               Next i
               
               Case 8
               ReDim color(255) As RGBQUAD
               For n = 0 To 255
                 Get #1, , color(n)
               Next n
               If BI.biWidth Mod 4 = 0 Then
               n = 0
               Else
               n = BI.biWidth Mod 4
               End If
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , num
                   pixcolor(i, j, 0) = color(num).rgbBlue
                   pixcolor(i, j, 1) = color(num).rgbGreen
                   pixcolor(i, j, 2) = color(num).rgbRed
                 Next j
                 For t = 1 To n
                   Get #1, , num
                 Next t
               Next i
               
               Case 24
               If BI.biWidth Mod 4 = 0 Then
               n = 0
               Else
               n = BI.biWidth Mod 4
               End If
               For i = 0 To BI.biHeight - 1
                 For j = 0 To BI.biWidth - 1
                   Get #1, , pixcolor(i, j, 0)
                   Get #1, , pixcolor(i, j, 1)
                   Get #1, , pixcolor(i, j, 2)
                 Next j
                 For t = 1 To n
                   Get #1, , num
                 Next t
               Next i
               End Select
               
        Close #1
        Form1.Enabled = True
        Form1.MousePointer = 0
        txsr.Enabled = True
        sb.Enabled = True
        yz.Enabled = True
        ezh.Enabled = True
        bytq.Enabled = True
        zft.Enabled = True
        jg.Enabled = True
        drsj.Enabled = True
End Sub

Private Sub zft_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, r, g, b As Integer
        Dim c, hd(255) As Long
        Dim cc, pic(255, 255, 2), l As Byte
        Dim PictureName As String
        MSChart1.ColumnCount = 32
        MSChart1.RowCount = 8
        Form1.MSChart1.Row = 1: Form1.MSChart1.RowLabel = "32"
        Form1.MSChart1.Row = 2: Form1.MSChart1.RowLabel = "64"
        Form1.MSChart1.Row = 3: Form1.MSChart1.RowLabel = "96"
        Form1.MSChart1.Row = 4: Form1.MSChart1.RowLabel = "128"
        Form1.MSChart1.Row = 5: Form1.MSChart1.RowLabel = "160"
        Form1.MSChart1.Row = 6: Form1.MSChart1.RowLabel = "192"
        Form1.MSChart1.Row = 7: Form1.MSChart1.RowLabel = "224"
        Form1.MSChart1.Row = 8: Form1.MSChart1.RowLabel = "256"
        Screen.MousePointer = 11
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            c = Picture1.Point(i, j)
            r = (c And 255)
            g = (c And 65280) / 256
            b = (c And 16711680) / 65536
            cc = Fix((r   g   b) / 3)
            pic(i, j, 2) = cc
          Next
        Next
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            l = pic(i, j, 2)
            hd(l) = hd(l)   1
          Next
        Next
        For i = 0 To 7
          For j = 0 To 31
            Form1.MSChart1.Row = i   1
            Form1.MSChart1.Column = j   1
            Form1.MSChart1.Data = hd(i * 32   j)
          Next
        Next
        Screen.MousePointer = 0
End Sub

Public Sub picpoint()
       Dim i, j, k As Integer
       Dim h(0 To 400, 0 To 400) As Integer              '存储像素的灰度值
       Dim r As Integer
       Dim c As Long
       Dim hd(0 To 300) As Integer
       Dim p(0 To 300) As Currency                       '灰度均值
       Dim tt(0 To 300) As Long                          '存储各等级像素个数
       Dim u As Long
       Dim uu(0 To 300) As Long
       Dim w(0 To 300) As Currency
       Dim b(0 To 300) As Long
       Dim max As Long
       Dim maxb As Integer
       Dim t As Integer
       MousePointer = 11
       '扫描全图,取得各像素灰度值
       For i = 1 To Picture1.ScaleWidth
         For j = 1 To Picture1.ScaleHeight
           c = Picture1.Point(i, j)
           r = (c And 255)
           h(i, j) = r
         Next
       Next
       '计算各等级像素个数
       For i = 1 To Picture1.ScaleWidth
         For j = 1 To Picture1.ScaleHeight
           For r = 0 To 255
             If h(i, j) = r Then
             tt(r) = tt(r)   1
             End If
           Next
         Next
       Next
       For t = 0 To 255
         p(t) = tt(t) / (Picture1.ScaleWidth * Picture1.ScaleHeight)       '计算灰度均值
       Next
       For t = 1 To 255
         u = u   (t - 1) * p(t)                          '计算灰度类均值和类直方图
       Next
       For k = 1 To 255
         uu(k) = uu(k - 1)   (k - 1) * p(k)              '计算类分离指标
         w(k) = w(k - 1)   p(k)
         If w(k) * (1 - w(k)) <> 0 Then
         b(k) = ((u * w(k) - uu(k)) * (u * w(k) - uu(k))) / (w(k) * (1 - w(k)))
         End If
       Next
       max = b(0)
       For k = 0 To 255                  '求最大Q时的k
         If b(k) >= max Then
         max = b(k)
         End If
       Next
       For k = 0 To 255
         If b(k) = max Then
         maxb = k
         End If
       Next
       Form2.Label2.Caption = maxb - 1           '输出k
End Sub

Private Sub yz_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        picpoint
        MousePointer = 0
        Form2.Show
End Sub

Private Sub bytq_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim i, j, rr As Integer
        Dim c, r, fx As Long
        Picture2.Cls
        Screen.MousePointer = 11
        For i = 0 To Picture1.ScaleWidth - 1 - 1
          For j = 0 To Picture1.ScaleHeight - 1 - 1
            c1 = Picture1.Point(i, j - 1)
            c2 = Picture1.Point(i - 1, j)
            c3 = Picture1.Point(i, j)
            c4 = Picture1.Point(i   1, j)
            c5 = Picture1.Point(i, j   1)
            c6 = Picture1.Point(i - 1, j - 1)
            c7 = Picture1.Point(i - 1, j   1)
            c8 = Picture1.Point(i   1, j - 1)
            c9 = Picture1.Point(i   1, j   1)
            r1 = (c1 And &HFF): r6 = (c6 And &HFF)
            r2 = (c2 And &HFF): r7 = (c7 And &HFF)
            r3 = (c3 And &HFF): r8 = (c8 And &HFF)
            r4 = (c4 And &HFF): r9 = (c9 And &HFF)
            r5 = (c5 And &HFF)
            fx = r6 - r2 - r4 - r9 - r1 - r8 - r7 - r5   8 * r3
            rr = Fix(Abs(fx / 2))
            Picture2.PSet (i, j), RGB(rr, rr, rr)
          Next j
        Next i
        Screen.MousePointer = 0
End Sub

Private Sub ezh_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Dim yu, i, j, r As Integer
        Dim c As Long
        yu = Form2.Label2.Caption
        Picture2.Cls
        For i = 0 To Picture1.ScaleWidth - 1
          For j = 0 To Picture1.ScaleHeight - 1
            c = Picture1.Point(i, j)
            r = (c And 255)
            If r > yu Then
            Picture2.PSet (i, j), RGB(255, 255, 255)
            Else
            Picture2.PSet (i, j), RGB(0, 0, 0)
            End If
          Next
        Next
End Sub

Private Sub sb_Click()
        Picture2.Cls
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        Form3.Show
        Form3.SetFocus
        Form3.Label2.Caption = Form2.Label2.Caption - 128
End Sub

Private Sub jg_Click()
        Dim Counter As Integer
        ProgressBar1.Min = 0
        ProgressBar1.max = 10000
        ProgressBar1.Visible = True
        ProgressBar1.Value = ProgressBar1.Min
        For Counter = 0 To 10000
          ProgressBar1.Value = Counter
        Next Counter
        ProgressBar1.Visible = False
        ProgressBar1.Value = ProgressBar1.Min
        If Form3.Label2.Caption = 21 Then
        Form4.Show
        Form4.SetFocus
        Form4.Label3.Caption = "张燕"
        Else
          If Form3.Label2.Caption = 78 Then
          Form4.Show
          Form4.SetFocus
          Form4.Label3.Caption = "李晓红"
          Else
          Form4.Hide
          Form5.Show
          Form5.SetFocus
          End If
        End If
End Sub

Private Sub tc_Click()
        Form1.Hide
        frmSplash.Show
        frmSplash.SetFocus
End Sub

标签: 程序 图片

实例下载地址

图片比对程序(找出图片的不同之处)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警