用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 zip文件 压缩
Dec 24 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
利用python画出折线图
Jul 26 Python
使用numba对Python运算加速的方法
Oct 15 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
python程序需要编译吗
Jun 19 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
使用Django实现商城验证码模块的方法
Jun 01 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
2021年最新CPU天梯图
2021/03/04 数码科技
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
python实现飞行棋游戏
2020/02/05 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
运动会广播稿60字
2014/01/15 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS