用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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python实现的彩票机选器实例
Jun 17 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python3.4爬虫demo
Jan 22 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
yolov5返回坐标的方法实例
Mar 17 Python
Python闭包的定义和使用方法
Apr 11 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调用mysql存储过程
2007/02/14 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
<script defer> defer 是什么意思
2009/05/10 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
js实现简易ATM功能
2020/10/27 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python读写二进制文件的方法
2015/05/09 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
人力资源部经理岗位职责规定
2014/02/23 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python