用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查找目录下指定扩展名的文件实例
Apr 01 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
python 读取DICOM头文件的实例
May 07 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
flask应用部署到服务器的方法
Jul 12 Python
Python中zip()函数的简单用法举例
Sep 02 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
js对象的复制继承实例
2015/01/10 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python正则表达式指南 推荐
2018/10/09 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
高考考python编程是真的吗
2020/07/20 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
世界读书日的活动方案
2014/08/20 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
感恩父母主题班会
2015/08/12 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
导游词之上海豫园
2019/10/24 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA