用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使用socket进行简单网络连接的方法
Apr 29 Python
Python中正则表达式详解
May 17 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
Django基础三之视图函数的使用方法
Jul 18 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
详解Python3 pandas.merge用法
Sep 05 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
phpmail类发送邮件函数代码
2012/02/20 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
Python中Django 后台自定义表单控件
2017/03/28 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Django框架安装方法图文详解
2019/11/04 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
浅析python连接数据库的重要事项
2021/02/22 Python
大专生毕业的自我评价
2014/02/06 职场文书
节水倡议书范文
2014/04/15 职场文书
环保建议书600字
2014/05/14 职场文书
物流专业自荐信
2014/05/23 职场文书
工作证明格式及范本
2014/09/12 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书