cv2.imshow和plt.imshow的区别

同样一张灰度图,plt.imshow显示的图片和cv2.imshow显示的图片不一致,这是因为cv2.imshowplt.imshow在处理图像显示时的默认行为有所不同。

python 复制代码
# matplotlib绘制
plt.imshow(image, "gray")
plt.show()

# cv2绘制
cv2.imshow("img", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

从下面图看matplotlib绘制的要比cv2绘制的对比度更强、更亮

matplotlib绘制 cv2绘制

cv2.imshow和plt.imshow的区别

1. 颜色空间:

  • cv2.imshow 使用的是 BGR 颜色空间,而 plt.imshow 使用的是 RGB 颜色空间。如果在使用 plt.imshow 时没有指定颜色空间,它会假设输入图像是 RGB 的。
  • 对于灰度图像,这个差异不明显,但在彩色图像中会导致颜色显示不正确。

2. 图像归一化:

  • plt.imshow 在显示灰度图像时,会自动对图像进行归一化处理,即将图像的像素值缩放到 0, 1 范围内。

  • cv2.imshow 则不会进行这种归一化处理,它直接显示图像的原始像素值。

3. 显示范围:

  • plt.imshow 默认会将灰度图像的像素值映射到 0, 1 范围内,这样可以增强对比度,使得图像看起来更亮。

  • cv2.imshow 则直接使用图像的原始像素值进行显示,如果图像的像素值范围较小,显示出来的图像可能会显得较暗。

为了让两者显示效果一致,可以在使用plt.imshow时关闭自动归一化功能,或者手动对图像进行归一化处理后拉伸到0-255再使用cv2.imshow进行图像显示。例如:

python 复制代码
import cv2
import matplotlib.pyplot as plt

# 假设 image是灰度图像
# 拉升像素值到0-255
min_val = np.min(image)
max_val = np.max(image)
stretched_image = 255 * ((tempImg - min_val) / (max_val - min_val))
stretched_image = stretched_image.astype(np.uint8)

# 使用 cv2.imshow 显示
cv2.imshow("img", stretched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 使用 plt.imshow 显示
plt.imshow(image, cmap='gray', vmin=0, vmax=255)
plt.show()
相关推荐
武子康2 分钟前
GPT-Live 全双工语音 Agent 深度拆解:连续交互 + 后台委托 + Voice Runtime 三层架构
人工智能·ai·chatgpt·架构·llm·交互
阿黎梨梨3 分钟前
听说大模型总“胡言乱语”?用 RAG 堵住它的嘴!
人工智能
刘小八4 分钟前
LangGraph 人机交互实战:Interrupt、人工审批与工作流恢复
人工智能·python·人机交互
cocoafei5 分钟前
GPT-5.6 后,别再混淆 ChatGPT 和 Codex 额度了
前端·人工智能·chatgpt
范闲7 分钟前
第二章:Octo v0.1.1:从「能用」到「好用」——终端 AI 聊天体验的全面升级
人工智能·后端
念雨思8 分钟前
每日穿搭助手:鸿蒙AI应用开发实战——AI衣橱,每日穿搭不再愁
人工智能·华为·powerpoint·harmonyos·鸿蒙
yangdaxiageo9 分钟前
算法时代的“心智置顶“:《功夫女足》如何构建GEO正向飞轮
人工智能·科技·算法·aigc
用户63697909814311 分钟前
RFM客群细分AI:从数据到策略的自动化
人工智能
workflower11 分钟前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
何时梦醒12 分钟前
一文搞懂 RAG(检索增强生成):从 LLM 幻觉到智能检索,手把手带你理解核心原理与代码实现
人工智能