用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使用稀疏矩阵节省内存实例
Jun 27 Python
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
Python中统计函数运行耗时的方法
May 05 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
重构Python代码的六个实例
Nov 25 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 错误处理经验分享
2011/10/11 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
js 匿名调用实现代码
2009/06/19 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
python encode和decode的妙用
2009/09/02 Python
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Python中的rfind()方法使用详解
2015/05/19 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python打开文件的方式有哪些
2020/06/29 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
服装厂厂长岗位职责
2013/12/27 职场文书
最新创业融资计划书
2014/01/19 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
商业项目策划方案
2014/06/05 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
党支部先进事迹材料
2014/12/24 职场文书
小学作文之描写天气
2019/08/15 职场文书
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python