我的程序的目的是取两张图像并决定它们的相似程度。我这里说的不是相同,而是相似。例如,如果我对同一网站的两个不同页面进行两张截图,它们的主题颜色可能非常相似,因此我希望程序声明它们相似。
我的问题开始时,两个图像都有一个白色的背景,几乎接管直方图计算(超过30%的图像是白色的,其余的分布)。
在这种情况下,cv2.compareHist(使用相关方法,该方法适用于其他情况)给出了非常糟糕的结果,也就是说,即使它们看起来非常不同,分数也非常高。
我想过在比较之前把白色(255)从直方图中去掉,但这需要我用256个箱子来计算直方图,当我想检查相似性时,这是不好的(我认为使用32或64个箱子是最好的)
不幸的是,由于法律原因,我不能添加我正在使用的图像
如果有人能提供一个想法,或解决它的代码,我将非常感激
非常感谢
您可以删除白色,重新排列直方图,然后比较:
- 计算256个bin的直方图
- 删除白色bin(或使其为零)。
- 通过添加4个连续的bin的值,将这些bin重新分组为64个bin。
- 执行compareHist()
这适用于任何"主色"。总的来说,您可以执行以下操作:
比较完整的直方图。如果它们不同,那么结束。如果它们相似,则查找主色(使用256 bin直方图),并执行上述过程,以从比较中删除主色。