用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文件的教程
May 06 Python
使用C++扩展Python的功能详解
Jan 12 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
Python实现的特征提取操作示例
Dec 03 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python3.7添加dlib模块的方法
Jul 01 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 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的栏目导航程序
2006/10/09 PHP
PHP类的使用 实例代码讲解
2009/12/28 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
分析python切片原理和方法
2017/12/19 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
Django模板语言 Tags使用详解
2019/09/09 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
python实现AdaBoost算法的示例
2020/10/03 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
员工自我鉴定
2013/10/09 职场文书
委托书范本
2014/09/13 职场文书
小学教师师德整改措施
2014/09/29 职场文书
销售代理协议书
2014/09/30 职场文书