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

如何使用Matplotlib/Seaborn绘制两张1000×1000图像的差异

绘制两张1000×1000图像的差异(Matplotlib实现)

我帮你整理了完整的可复现代码,专门解决你用Matplotlib绘制两张大尺寸修改后图像差异的需求,代码里已经对应了你提到的右上和左下子图布局,还做了大尺寸图像的渲染优化:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 设置绘图风格,让输出更美观
sns.set(style='dark')

# 创建2×2子图布局,调整dpi避免大尺寸图像内存过载
fig, axes = plt.subplots(2, 2, figsize=(10, 10), dpi=100)
fig.suptitle('StackOverflow Matplotlib colorbar demo', fontsize=16)

# 生成第一张1000×1000随机图像数据
dat1 = np.random.randn(1000, 1000)
# 生成修改后的第二张图像(模拟你对原图的修改:给右上角区域添加偏移)
dat2 = dat1.copy()
dat2[-300:, -300:] += 2.5  # 右上角300×300区域做修改,方便后续看差异

# 绘制子图:左上为原始图像
im1 = axes[0,0].imshow(dat1, cmap='viridis')
axes[0,0].set_title('原始图像')
axes[0,0].axis('off')  # 关闭坐标轴,聚焦图像内容

# 你指定的右上角子图:展示修改后的图像2
im2 = axes[0,1].imshow(dat2, cmap='viridis')
axes[0,1].set_title('修改后图像(右上)')
axes[0,1].axis('off')

# 你指定的左下角子图:再次展示修改后的图像2
axes[1,0].imshow(dat2, cmap='viridis')
axes[1,0].set_title('修改后图像(左下)')
axes[1,0].axis('off')

# 计算并绘制两张图像的差异图
diff_data = np.abs(dat1 - dat2)
# 归一化差异值到0-1范围,让差异区域更明显
diff_data = diff_data / diff_data.max()
im_diff = axes[1,1].imshow(diff_data, cmap='coolwarm')
axes[1,1].set_title('图像差异(亮区为修改处)')
axes[1,1].axis('off')

# 添加统一的颜色条,避免重复占用空间
fig.colorbar(im2, ax=axes.ravel().tolist(), shrink=0.8, location='bottom')

# 调整布局,避免标题和子图重叠
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
# 保存图像时记得加bbox_inches='tight',避免内容被截断
plt.savefig('image_diff_comparison.png', bbox_inches='tight')
plt.show()

关键细节说明

  • 大尺寸图像优化:设置dpi=100并关闭坐标轴,减少内存占用和渲染时间,避免处理1000×1000图像时卡顿
  • 差异计算:用np.abs(dat1 - dat2)计算绝对差异,归一化后能更清晰地突出修改区域(亮部就是你修改过的地方)
  • 子图布局:严格对应你提到的右上和左下子图展示修改后的图像,同时补充了原始图和差异图做完整对比
  • 颜色条处理:统一添加底部颜色条,避免每个子图单独加颜色条导致布局混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:03