图片相似度的判断小弟做一个视频处理软件,使用摄像头采集视频图像,定时截取视频画面,前后两次对比图像,判
图片相似度的判断
小弟做一个视频处理软件,使用摄像头采集视频图像,定时截取视频画面,前后两次对比图像,判断是否有变化。具体的做法是:
1、编写视频采集程序,实现视频图像采集,这点我已实现。
2、定时截取视频画面,我使用BitBlt实现了
3、对比两副图片的变化,现在没有好的办法,所以特请各位高手门帮帮忙,拜谢!!!
简单的说就是如何判断两副图片是否一样,简单高效些的。
[解决办法]
相似度是人工智能的问题
价值不菲
[解决办法]
我也曾做类似的问题,当时也是采用的自定义阀值 然后二值化图片,进行判断。后来发现,直接两幅图片进行比较,很容易,但是如果是视频截图的话,就会麻烦:一般情况下,你的视频截图都会有雪花点(噪点)出现,这个是不固定的,也就是说,两幅图片即使一模一样,但是由于噪点的影响,用上边我说的方法也可能会误判。高深的方法的话,肯定是要牵扯到人工智能、模糊判断方面的东西。估计一般情况下难实现。目前我还没有什么好的办法。
[解决办法]
[解决办法]
这个很难比较,如从哪个点开始相象时比较,确实需要更好的算法.下面给个理想状态下的比较供参考
Picture1和Picture2分别加载图象供比较
- VB code
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) & "%"
[解决办法]
- VB code
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 SuberrSub:End Sub
