OpenCV 找出两个图像之间的差异 cv2.absdiff

OpenCV 找出两个图像之间的差异 cv2.absdiff

flyfish

cv2.absdiff 是 OpenCV 库中的一个函数,它的作用是计算两个数组(通常是图像)对应元素差值的绝对值。

功能概述

在图像处理领域,很多时候需要找出两个图像之间的差异,比如检测运动物体、背景减除等场景。cv2.absdiff 函数能够帮助我们获取两个图像在对应像素位置上的差异值,并且以绝对值的形式呈现,这样可以忽略差值的正负,只关注差异的大小。

函数语法

result = cv2.absdiff(src1, src2)
  • 参数说明
    • src1:第一个输入数组(图像),可以是单通道或多通道的图像,数据类型通常为 uint8
    • src2:第二个输入数组(图像),要求和 src1 具有相同的大小和数据类型。
  • 返回值
    • result:一个与输入数组大小和通道数相同的数组,其中每个元素是 src1src2 对应元素差值的绝对值。

原理

对于两个输入数组 src1src2cv2.absdiff 会逐元素进行如下计算:
result(i,j)=∣src1(i,j)−src2(i,j)∣ \text{result}(i, j) = \left| \text{src1}(i, j) - \text{src2}(i, j) \right| result(i,j)=src1(i,j)src2(i,j)
其中,(i, j) 表示数组中元素的位置。

示例代码

以下是一个简单的示例,展示如何使用 cv2.absdiff 计算两个图像的差异:

import cv2
import numpy as np

# 读取两张图像
image1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)

# 确保两张图像大小相同
image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]))

# 计算两个图像的差异
diff = cv2.absdiff(image1, image2)

# 显示原始图像和差异图像
cv2.imshow('Image 1', image1)
cv2.imshow('Image 2', image2)
cv2.imshow('Difference', diff)

# 等待按键事件
cv2.waitKey(0)

# 关闭所有窗口
cv2.destroyAllWindows()

直观地看到两个图像之间的差异。在实际应用中,cv2.absdiff 常用于运动检测、背景减除等场景,通过计算当前帧与背景帧的差异来找出运动的物体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值