用openCV和Python 实现图片对比,并标识出不同点的方式

作者:ibaymin 时间:2023-08-31 09:30:55 

最近项目中需要实现两组图片对比,并能将两者的区别标识出来。

在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下:

想要实现此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 实现图片对比,并标识出不同点的方式

来源:https://blog.csdn.net/ibaymin/article/details/74936742

标签:openCV,Python,图片对比
0
投稿

猜你喜欢

  • 关于django连接mysql数据库并进行数据库的创建的问题

    2024-01-22 04:50:12
  • pytorch中的自定义反向传播,求导实例

    2021-08-07 06:57:53
  • face++与python实现人脸识别签到(考勤)功能

    2021-10-18 09:06:06
  • 解析SQL Server 2005 溢用之:合并列值

    2009-01-23 14:08:00
  • Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】

    2023-12-16 21:28:44
  • 显卡驱动CUDA 和 pytorch CUDA 之间的区别

    2021-12-29 04:35:31
  • Yahoo发布一款FireFox网站开发插件

    2007-09-23 16:11:00
  • VSCode的使用配置以及VSCode插件的安装教程详解

    2023-05-31 14:48:46
  • Dreamweaver如何防止及消除垃圾代码的产生

    2007-11-13 17:15:00
  • 微信小程序基于slider组件动态修改标签透明度的方法示例

    2024-05-11 09:42:14
  • PyQt5实现用户登录GUI界面及登录后跳转

    2021-04-08 07:50:03
  • Python并发之多进程的方法实例代码

    2022-04-13 12:43:54
  • asp如何实现点击数的计算?

    2010-05-18 18:39:00
  • python中使用iterrows()对dataframe进行遍历的实例

    2023-12-29 13:43:02
  • python将unicode和str互相转化的实现

    2023-07-17 21:36:34
  • Anaconda的安装与虚拟环境建立

    2022-05-26 01:06:22
  • go日志库中的logrus

    2023-07-21 13:48:02
  • Keras中的多分类损失函数用法categorical_crossentropy

    2023-06-23 12:25:37
  • php自定义函数实现二维数组按指定key排序的方法

    2023-06-27 09:54:36
  • python同时给两个收件人发送邮件的方法

    2021-10-23 07:31:36
  • asp之家 网络编程 m.aspxhome.com