用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中随机函数random用法实例
Apr 30 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
Python切片工具pillow用法示例
Mar 30 Python
python数字图像处理实现直方图与均衡化
May 04 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
详解python数据结构和算法
Apr 18 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
python支持多线程的爬虫实例
Dec 21 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
python:HDF和CSV存储优劣对比分析
Jun 08 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的mssql数据库连接类实例
2014/11/28 PHP
php自动加载方式集合
2016/04/04 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
prototype1.4中文手册
2006/09/22 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python中random模块生成随机数详解
2016/03/10 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
Python虚拟环境项目实例
2017/11/20 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python time库基本使用方法分析
2019/12/13 Python
PyTorch中permute的用法详解
2019/12/30 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
Python用Jira库来操作Jira
2020/12/28 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
Collection和Collections的区别
2016/05/02 面试题
项目转让协议书
2014/10/27 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技