用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解析html开发库pyquery使用方法
Feb 07 Python
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
NumPy统计函数的实现方法
Jan 21 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
django中嵌套的try-except实例
May 21 Python
怎么快速自学python
Jun 22 Python
Python pip install之SSL异常处理操作
Sep 03 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 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中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP生成plist数据的方法
2015/06/16 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
jQuery DOM操作实例
2014/03/05 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
Django+Vue跨域环境配置详解
2018/07/06 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
python目录与文件名操作例子
2016/08/28 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
详解Python3 基本数据类型
2019/04/19 Python
实例详解Python模块decimal
2019/06/26 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
岗位职责的含义
2013/11/17 职场文书
银行出纳岗位职责
2013/11/25 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
党委工作总结2015
2015/04/27 职场文书
公司2015年终工作总结
2015/05/26 职场文书