用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之折腾一下目录
Oct 24 Python
python端口扫描系统实现方法
Nov 19 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python实现雨滴下落到地面效果
Jun 21 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
Python实现程序判断季节的代码示例
Jan 28 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
python tornado使用流生成图片的例子
Nov 18 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python Numpy库的超详细教程
Apr 06 Python
宝塔更新Python及Flask项目的部署
Apr 11 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 项目的方法
2007/01/02 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
python多线程扫描端口示例
2014/01/16 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
Python实现将xml导入至excel
2015/11/20 Python
python中zip()方法应用实例分析
2016/04/16 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python random模块的使用示例
2020/10/10 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
问卷调查计划书
2014/01/10 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
2014年文员工作总结
2014/11/18 职场文书
初中差生评语
2014/12/29 职场文书
2014年个人年终总结
2015/03/09 职场文书
小学运动会加油稿
2015/07/22 职场文书
学习十八大的感悟
2015/08/11 职场文书