用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 对象中的数据类型
May 13 Python
Django 前后台的数据传递的方法
Aug 08 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
python五子棋游戏的设计与实现
Jun 18 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
Django 解决由save方法引发的错误
May 21 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
python opencv实现简易画图板
Aug 27 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截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
使用python实现简单五子棋游戏
2019/06/18 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
汽车运用工程专业求职信
2014/06/18 职场文书
电教室标语
2014/06/20 职场文书
华山导游词
2015/02/03 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
少年犯观后感
2015/06/11 职场文书
班级联欢会主持词
2015/07/03 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android