Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。
基础知识铺垫
上篇博客 Python OpenCV 图像处理之图像直方图,取经之旅第 25 天中,我们重点学习了直方图的绘制方法与应用,本篇博客继续对直方图进行分析。
本篇博客咱们首先学习一下,如何用直方图去比较两幅图片的相似性。
通过 <kbd>cv2.compareHist</kbd> 函数计算图片的相似度,在今天的学习中,橡皮擦并没有 get 到一个特别好的场景,故本部分从语法角度进行学习。
cv2.compareHist 函数
该函数原型如下:
参数说明如下:
H1,H2:要比较图像的直方图;
method: 比较方式
其中比较方式涉及如下几种枚举值。
<kbd>cv2.HISTCMP_CORREL</kbd>:相关性比较,值越大,相关度越高,最大值为 1,最小值为 0;
<kbd>cv2.HISTCMP_CHISQR</kbd>:卡方比较,值越小,相关度越高,最大值无上界,最小值 0;
<kbd>cv2.HISTCMP_BHATTACHARYYA</kbd>:巴氏距离比较,值越小,相关度越高,最大值为 1,最小值为 0;
<kbd>cv2.HISTCMP_INTERSECT</kbd>:十字交叉,值越大越相似。
先比较灰度图的,运行下述代码即可。
结果如下图所示,这里我找的是两个相似的图片(从找不同游戏里面找到的)。
得到的结果如下:
由于两张图非常相似,得到的结果也符合刚才的说明。
巴氏距离:0.0501735845451386 >>> 值越小,相关度越高,最大值为 1,最小值为 0;
相关性:0.9855477082033252 >>> 值越大,相关度越高,最大值为 1,最小值为 0;
卡方:3887.8752812639 >>> 值越小,相关度越高,最大值无上界,最小值 0;(不过看起来,这个好像用处不大)
十字交叉:166493.0 >>> 十字交叉,值越大越相似。
切换成不同的两张图片,可以看一下运行结果,首先看灰度直方图。
在看得到的各个值:
接下来,我们比较一下彩色图的直方图,这部分我也在网上看到了一个算法,但是由于代码实在没看太懂,直接忽略掉了。以下代码转载自网络,建议本阶段,看一下就好,不要钻牛角尖。
代码来源:网络。
不过,除了灰度直方图,咱们用已有的知识可以比较不同通道的直方图。
具体代码修改部分如下:
关于上文提及的 巴氏距离
,卡方
都属于统计学知识,暂时按下不表。
橡皮擦的小节
希望今天的一个小时,你有所收获,我们下篇博客见~
相关阅读
今天是持续写作的第 <font color="red">66</font> / 100 天。如果你有想要交流的想法、技术,欢迎在评论区留言。
如果你想跟博主建立亲密关系,可以关注同名公众号 <font color="red">梦想橡皮擦</font>,近距离接触一个逗趣的互联网高级网虫。博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/850258510bb31599cfb264461】。文章转载请联系作者。
评论