用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 04 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
使用Python实现分别输出每个数组
Dec 06 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Python实现图片识别加翻译功能
Dec 26 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Pytorch转onnx、torchscript方式
May 25 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
JavaScript知识点整理
2015/12/09 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python中的set实现不重复的排序原理
2018/01/24 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
应用服务器有那些
2012/01/19 面试题
实习期自我鉴定
2013/10/11 职场文书
环境工程毕业生自荐信
2013/11/17 职场文书
《争吵》教学反思
2014/02/15 职场文书
临时用工协议书范本
2014/10/29 职场文书
综合管理员岗位职责
2015/02/11 职场文书
golang内置函数len的小技巧
2021/07/25 Golang