You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenCV精准识别两幅图像的深色差异区域并圈出?

图像差异精准识别与标注方案

问题背景

使用PIL的ImageChops.difference检测图像差异时,结果显示全图几乎都有差异,但实际仅少数深色区域存在差异。需要用OpenCV实现精准识别,并在原始图像上圈出差异点。

当前PIL代码:

from PIL import Image, ImageChops
img1, img2 = Image.open('1.png'), Image.open('2.png')
diff = ImageChops.difference(img1,img2)
if diff.getbbox():
    diff.show()

相关图像:

  • 图像1:图像1
  • 图像2:图像2
  • PIL检测结果:PIL检测输出

解决方案

核心思路

ImageChops.difference直接计算RGB像素绝对差,对微小色彩波动(如压缩偏差)过于敏感,导致大面积误判。OpenCV通过灰度化、阈值过滤、轮廓检测的组合,可精准提取真正的差异区域。

实现代码

import cv2
import numpy as np

# 读取图像
img1 = cv2.imread('1.png')
img2 = cv2.imread('2.png')

# 转为灰度图,消除色彩通道干扰
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# 计算灰度图像素差异
diff_gray = cv2.absdiff(gray1, gray2)

# 阈值过滤:仅保留差异明显的区域(阈值可按需调整)
_, thresh = cv2.threshold(diff_gray, 30, 255, cv2.THRESH_BINARY)

# 形态学操作去除噪点
kernel = np.ones((3, 3), np.uint8)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)  # 先腐蚀后膨胀,消除小噪点
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) # 先膨胀后腐蚀,填补小空洞

# 查找差异区域轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 在原始图像上标注差异区域
for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # 图像1上绘制红色矩形框
    cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 0, 255), 2)
    # 图像2上绘制红色矩形框
    cv2.rectangle(img2, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 展示结果
cv2.imshow('标注差异的图像1', img1)
cv2.imshow('标注差异的图像2', img2)
cv2.imshow('过滤后的差异图', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存标注后的图像(可选)
cv2.imwrite('img1_marked.png', img1)
cv2.imwrite('img2_marked.png', img2)

关键步骤说明

  1. 灰度化:将彩色图像转为单通道灰度图,聚焦亮度差异,避免RGB通道各自波动的干扰。
  2. 阈值过滤:设置像素差阈值(示例为30),将微小差异的区域置为黑色,只保留真正的差异区域。
  3. 形态学操作:通过开运算和闭运算清理差异图中的噪点,让差异轮廓更规整。
  4. 轮廓标注:提取差异区域的轮廓,用红色矩形框在原始图像上标记,直观展示差异位置。

参数调整建议

  • 若差异区域被误过滤,可降低阈值(如从30调至20);
  • 若噪点过多,可增大形态学核尺寸(如从(3,3)调至(5,5));
  • 矩形框的颜色、线宽可通过cv2.rectangle的最后两个参数修改。

内容的提问来源于stack exchange,提问作者Peter Basaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:05:00