用openCV和Python 实现图片对比,并标识出不同点的方式


Posted in Python onDecember 19, 2019

最近项目中需要实现两组图片对比,并能将两者的区别标识出来。

在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下:

想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Python 两个工具以及scikit-image和imutils两个库:

安装方法,在这里不多说,我安装的是Python3.6 和openCV2,安装方法网上自行百度谷歌;

进入正题:

新建一个新的Python文件并命名为copmarePicture.py,写入下面的代码:

from skimage.measure import compare_ssim
#~ import skimage as ssim
import argparse
import imutils
import cv2

加载两张图片并将他们转换为灰度:

imageA = cv2.imread("D:/111test/111.png")
imageB = cv2.imread("D:/111test/444.png")

grayA = cv2.cvtColor(imageA,cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB,cv2.COLOR_BGR2GRAY)

接下来,计算两个灰度图像之间的结构相似度指数:

(score,diff) = compare_ssim(grayA,grayB,full = True)
diff = (diff *255).astype("uint8")
print("SSIM:{}".format(score))

找到不同点的轮廓以致于我们可以在被标识为“不同”的区域周围放置矩形:

thresh = cv2.threshold(diff,0,255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

找到一系列区域,在区域周围放置矩形:

for c in cnts:                                                          
 (x,y,w,h) = cv2.boundingRect(c)                                                
 cv2.rectangle(imageA,(x,y),(x+w,y+h),(0,0,255),2)                                           
 cv2.rectangle(imageB,(x,y),(x+w,y+h),(0,0,255),2)

用cv2.imshow 展现最终对比之后的图片, cv2.imwrite 保存最终的结果图片

cv2.imshow("Modified",imageB)
cv2.imwrite("haha2.png",imageB)
cv2.waitKey(0)

到这已经实现两张图片的对比并标识出不同。结果如下所示:(图1图2对比,图3为对标结果

用openCV和Python 实现图片对比,并标识出不同点的方式

用openCV和Python 实现图片对比,并标识出不同点的方式

用openCV和Python 实现图片对比,并标识出不同点的方式

以上这篇用openCV和Python 实现图片对比,并标识出不同点的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python实现二维插值的三维显示
Dec 17 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
jupyter notebook 增加kernel教程
Apr 10 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
python3 re返回形式总结
Nov 20 Python
python正则表达式re.search()的基本使用教程
May 21 Python
Python命令行click参数用法解析
Dec 19 #Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 #Python
Python定义函数时参数有默认值问题解决
Dec 19 #Python
Python爬取腾讯视频评论的思路详解
Dec 19 #Python
使用Pandas将inf, nan转化成特定的值
Dec 19 #Python
pandas中read_csv的缺失值处理方式
Dec 19 #Python
python错误调试及单元文档测试过程解析
Dec 19 #Python
You might like
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
PHP attributes()函数讲解
2019/02/03 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
python实现音乐下载的统计
2018/06/20 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python Kmeans算法原理深入解析
2019/08/23 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
安全标准化实施方案
2014/02/20 职场文书
项目施工员岗位职责
2014/03/09 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
地球一小时宣传标语
2014/06/24 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
优质护理心得体会
2016/01/22 职场文书
JVM之方法返回地址详解
2022/02/28 Java/Android