小弟做一个视频处理软件,使用摄像头采集视频图像,定时截取视频画面,前后两次对比图像,判断是否有变化。具体的做法是:
1、编写视频采集程序,实现视频图像采集,这点我已实现。
2、定时截取视频画面,我使用BitBlt实现了
3、对比两副图片的变化,现在没有好的办法,所以特请各位高手门帮帮忙,拜谢!!!
简单的说就是如何判断两副图片是否一样,简单高效些的。
1、编写视频采集程序,实现视频图像采集,这点我已实现。
2、定时截取视频画面,我使用BitBlt实现了
3、对比两副图片的变化,现在没有好的办法,所以特请各位高手门帮帮忙,拜谢!!!
简单的说就是如何判断两副图片是否一样,简单高效些的。
Picture1和Picture2分别加载图象供比较 Dim n As Long, k As Single, b As Long
b = 100 '不必每个点都比较,跳着选取
For y = 0 To Picture1.ScaleHeight - 1
For x = 0 To Picture1.ScaleWidth - 1 Step b
'颜色接近,误差正负5
If Abs(Picture1.Point(x, y) - Picture2.Point(x, y)) < 5 then
n = n + 1
k = Round(n / (Picture1.ScaleHeight * Picture1.ScaleWidth), 4)
If k >= 0.1 / b Then
Label1.Caption = "颜色相似度:" & Round(k * 100 * b, 2) & "%"
DoEvents
End If
End If
Next x
Next y
MsgBox "比较完成,颜色相似度:" & Round(k * 100 * b, 2) & "%"
Private Sub tmrP_Timer()
Dim lngP As Long
Dim bytOneRed As Integer
Dim bytOneGreen As Integer
Dim bytOneBlue As Integer
Dim bytTwoRed As Integer
Dim bytTwoGreen As Integer
Dim bytTwoBlue As Integer
Dim bolP As Boolean
dim lngW as long
dim lngH as long
On Error GoTo errSub
'picS:源图像
'picOne:第一副截图
'picTwo:第二副截图
lngW=picS.Width
lngH=picS.Height
lngP = BitBlt(picTwo.hdc, 0, 0, lngW, lngH, picOne.hdc, 0, 0, SRCCOPY)
lngP = BitBlt(picOne.hdc, 0, 0, lngW, lngH, picS.hdc, 0, 0, SRCCOPY)
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lngP = GetPixel(picOne.hdc, 50, 50)
txtColorOne.Text = lngP
bytOneRed = lngP Mod &H100
bytOneGreen = (lngP \ &H100) Mod &H100
bytOneBlue = lngP \ &H10000 lngP = GetPixel(picTwo.hdc, 50, 50)
txtColorTwo.Text = lngP
bytTwoRed = lngP Mod &H100
bytTwoGreen = (lngP \ &H100) Mod &H100
bytTwoBlue = lngP \ &H10000 txtRed.Text = Abs(bytOneRed - bytTwoRed)
txtGreen.Text = Abs(bytOneGreen - bytTwoGreen)
txtBlue.Text = Abs(bytOneRed - bytTwoRed) If Abs(bytOneRed - bytTwoRed) < 10 And Abs(bytOneGreen - bytTwoGreen) < 10 And Abs(bytOneBlue - bytTwoBlue) < 10 Then
Me.Caption = "图像相似"
else
Me.Caption = "图像不相似"
End If
Exit Sub
errSub:
End Sub