当前位置:编程学习 > VB >>

vb查找相似图片

有一张图片a,同时有一个图片库B,图片库中图片都只有图片的一部分
如何实现从图片库中找出与图片a相似图形?
详情见下图:
http://hiphotos.zhaoxi.net/%CD%E6%C0%E9%B0%CA%B5%C4%C3%A8/pic/item/9994e710e6fd20e4c2ce794c.jpg
自己想的办法是:
先取得图片A所有的颜色点,同时图片库中也转换成颜色点,然后比较,如果可以,应该怎么弄?
答案:具体应该用到模糊判别。是一个比较专业的问题,你在这里提出应该没有人能回答你。

应用图像聚类.我们知道,彩色图像的数据可以看成一M*N*3的数组,但是一方面三维数组的处理速度要低于一维或二维数组,因此,用二维数组来描述要分割的对象不仅意义明显而且有利于计算速度的提高。图像数据在内存中的排列方式是BGRABRGABGRA.......(32位的),这样,通过API函数直接读取的数据一般为一(1 to 4,1 to M*N)数组,

如果想快速判别两个图片是否相同,可用如下方法:

Public Enum CompareResult


ciCompareOk


ciPixelMismatch


ciSizeMismatch

End Enum





Public Shared Function Compare(ByVal bmp1 As Bitmap, ByVal bmp2 As Bitmap) As CompareResult



'首先检查两副图片大小是否完全相等


If Not bmp1.Size.Equals(bmp2.Size) Then



Return CompareResult.ciSizeMismatch


Else



'把每个图片转成一字节数组



Dim ic As New System.Drawing.ImageConverter



Dim btImage1(1) As Byte



btImage1 = CType(ic.ConvertTo(bmp1, btImage1.GetType()), Byte())



Dim btImage2(1) As Byte



btImage2 = CType(ic.ConvertTo(bmp2, btImage2.GetType()), Byte())



Debug.WriteLine(UBound(btImage1))



'计算每个图片的hash值



Dim shaM As New SHA256Managed




Dim hash1 As Byte() = shaM.ComputeHash(btImage1)



Dim hash2 As Byte() = shaM.ComputeHash(btImage2)




'比较hash值



Dim i As Integer



For i = 0 To Math.Min(hash1.Length, hash2.Length) - 1




If hash1(i) <> hash2(i) Then





Return CompareResult.ciPixelMismatch




End If



Next


End If


Return CompareResult.ciCompareOk

End Function

当然这种方法存在缺陷,实际情况下,很多图片都经过JPEG等有损压缩,即使是同一张图片用不同的压缩参数得到的结果hash结果也完全不同。这种办法还是有一定限制的

上一个:VB新手入门问题
下一个:vb作业问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,