时间:2021-05-22
最近项目中需要实现两组图片对比,并能将两者的区别标识出来。
在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下:
想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Python 两个工具以及scikit-image和imutils两个库:
安装方法,在这里不多说,我安装的是Python3.6 和openCV2,安装方法网上自行百度谷歌;
进入正题:
新建一个新的Python文件并命名为copmarePicture.py,写入下面的代码:
from skimage.measure import compare_ssim#~ import skimage as ssimimport argparseimport imutilsimport 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 实现图片对比,并标识出不同点的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、复习计算机内存模型,synchronized和volatile关键字简介二、两者对比sychronized和volatile都解决了内存可见性问题不同点:(
下面给大家介绍mybatisforeach批量插入数据:Oracle与MySQL不同点:•主要不同点在于foreach标签内separator属性的
不同点:不能直接实例化接口。接口不包含方法的实现。接口可以多继承,类只能单继承。类定义可以在不同的源文件之间进行拆分。相同点:接口、类和结构都可以从多个接口继承
ArrayList和LinkedList都实现了List接口,有以下的不同点:1、ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复
SpringSecurity和Shiro的区别相同点1、认证功能2、授权功能3、加密功能4、会话管理5、缓存支持6、rememberMe功能...不同点1、Sp