最近由于项目提出需要一个可以识别房源图片盗用问题,由此想到需要一个图片相识度识别的程序,所以百度一番,找个一段图片相识度识别的代码(引用地址:https://blog.csdn.net/chengmodelong/article/details/24521295).
研究一番,在此做下代码原理说明:
第一步 缩小图片尺寸
将图片缩小到8x8的尺寸, 总共64个像素. 这一步的作用是去除各种图片尺寸和图片比例的差异, 只保留结构、明暗等基本信息.
第二步 转为灰度图片
将缩小后的图片, 转为64级灰度图片.
第三步 计算灰度平均值
计算图片中所有像素的灰度平均值
第四步 比较像素的灰度
将每个像素的灰度与平均值进行比较, 如果大于或等于平均值记为1, 小于平均值记为0.
第五步 计算哈希值
将上一步的比较结果, 组合在一起, 就构成了一个64位的二进制整数, 这就是这张图片的指纹.
第六步 对比图片指纹
得到图片的指纹后, 就可以对比不同的图片的指纹, 计算出64位中有多少位是不一样的. 如果不相同的数据位数不超过5, 就说明两张图片很相似, 如果大于10, 说明它们是两张不同的图片.
这里感谢文章作者的详细介绍,原理研究之后,就是开始实践了,demo走起,
比如我们对比下毕老师和 虹国某老师,结果为34,所以这是两张不同的图片
然后让我们做下批量对比。。。。
,跑个程序还出现内存不足??
一番研究发现问题出现在了代码析构上了,
看到这段代码,内心突然想到,image创建的对象一直存在内存里,然后却没有释放,如果进行批量处理就可能造成内存不足了
解决方案就是在对象使用完后,进行内存释放
加上上述代码后,再测试就好了,幸好相关的知识没有还给老师