文章目录

  • 一、图像红变蓝,蓝变红的问题
    • (1)原因分析
    • (2)代码及结果展示
      • 1)错误代码
      • 2)错误结果
      • 3)正确代码
  • 二、深度学习数据包plt.imshow绘制图像偏蓝黄色
    • (1)原因分析
      • 1)原理解释代码
      • 2)结果
    • (2)实际绘图分析与解决
      • 1)问题代码示例
      • 2)问题结果
      • 3)期望代码示例
      • 4)期望结果
  • 三、参考

一、图像红变蓝,蓝变红的问题

(1)原因分析

  • 用cv2.imread()读取数据,用plt.imshow()展示数据会出现红变蓝,蓝变红的问题。
  • 原因:cv2.imread() 读取图像格式为b,g,r(这是由于以前流行bgr格式的图像显示方式,今年才流行rgb格式,opencv的这个格式是历史遗留问题)而 plt.imshow()显示按照 rgb次序。因此会出现色偏,应该使用
  • RGB 和 BGR 的转换可以直接使用 cvt = org[:,:,::-1] 来实现,前两个 : 表示第一第二维不变,::-1表示将第三维倒序排列。

(2)代码及结果展示

1)错误代码

import cv2
import matplotlib.pyplot as pltimage = cv2.imread('1.jpg')
# image = image[:, :, ::-1]
print(image.shape)
plt.imshow(image)
# 关闭x,y轴刻度
plt.xticks([])
plt.yticks([])
# 关闭坐标轴
plt.axis('off')
plt.show()

2)错误结果

  • 左边为原图,右边为plt.imshow()显示的图片,可以发现红变蓝,蓝变红的问题

3)正确代码

  • RGB 和 BGR 的转换可以直接使用 cvt = org[:,:,::-1] 来实现,前两个 : 表示第一第二维不变,::-1表示将第三维倒序排列。
import cv2
import matplotlib.pyplot as pltimage = cv2.imread('1.jpg')
# 修改的地方,bgr→rgb
image = image[:, :, ::-1]
# 或image = image[:,:,[2,1,0]]
print(image.shape)
plt.imshow(image)
# 关闭x,y轴刻度
plt.xticks([])
plt.yticks([])
# 关闭坐标轴
plt.axis('off')
plt.show()

二、深度学习数据包plt.imshow绘制图像偏蓝黄色

(1)原因分析

  • 色偏问题原因:plt.imshow()在绘制2维图像时,0(最小值)显示深蓝色,1(最大值)显示黄色,其他数值显示由蓝到黄的过度颜色,所以图像画出来是蓝黄相间的。

1)原理解释代码

# coding=utf-8
from matplotlib import pyplot as pltX = [[0.1, 0.2, 0.3],[0.4, 0.5, 0.6],[0.7, 0.8, 0.9]]
plt.imshow(X)
plt.colorbar()
# # 关闭x,y轴刻度
# plt.xticks([])
# plt.yticks([])
# # 关闭坐标轴
# plt.axis('off')
plt.show()

2)结果

(2)实际绘图分析与解决

  • 下图每一张图像是由(28,28, 1)压缩(np.squeeze)到(28,28)的异色图像,
  • 以下代码以FashionMNIST数据集为例,首先读取10个(28,28)的图片展示在一排,图片颜色维蓝黄色。
  • 相关博客:【pytorch + matplotlib】将若干张图像拼接成一张图像(附代码,以FashionMNIST为例)(subplot 和 subplots区别)

1)问题代码示例

import matplotlib.pyplot as plt
import numpy as np
import torchvision
import torchvision.transforms as transforms
from IPython import displaynp.set_printoptions(threshold=100000000)mnist_train = torchvision.datasets.FashionMNIST(root='./data', train=True, download=True,transform=transforms.ToTensor())
mnist_test = torchvision.datasets.FashionMNIST(root='./data', train=False, download=True,transform=transforms.ToTensor())def use_svg_display():"""Use svg format to display plot in jupyter"""display.set_matplotlib_formats('svg')# 本函数已保存在d2lzh包中方便以后使用
def get_fashion_mnist_labels(labels):text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]# 本函数已保存在d2lzh包中方便以后使用
def show_fashion_mnist(images, labels):use_svg_display()# 这里的_表示我们忽略(不使用)的变量_, figs = plt.subplots(1, len(images), figsize=(12, 12))for f, img, lbl in zip(figs, images, labels):# np.squeeze将(1,28,28)→(28,28)f.imshow(np.squeeze(img.numpy()))f.set_title(lbl)f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)plt.show()# 完成了torch.utils.data.DataLoader的功能
X, y = [], []
for i in range(10):X.append(mnist_train[i][0])y.append(mnist_train[i][1])
show_fashion_mnist(X, get_fashion_mnist_labels(y))

2)问题结果

3)期望代码示例

  • 绘制出黑白图像方法:将三个相同的(28,28, 1)的图像升维为(28,28, 3)的图像,然后绘制出来,就可以发现是正常的黑白图像了。
import matplotlib.pyplot as plt
import numpy as np
import torchvision
import torchvision.transforms as transforms
from IPython import displaynp.set_printoptions(threshold=100000000)mnist_train = torchvision.datasets.FashionMNIST(root='./data', train=True, download=True,transform=transforms.ToTensor())
mnist_test = torchvision.datasets.FashionMNIST(root='./data', train=False, download=True,transform=transforms.ToTensor())def use_svg_display():"""Use svg format to display plot in jupyter"""display.set_matplotlib_formats('svg')# 本函数已保存在d2lzh包中方便以后使用
def get_fashion_mnist_labels(labels):text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]# 本函数已保存在d2lzh包中方便以后使用
def show_fashion_mnist(images, labels):use_svg_display()# 这里的_表示我们忽略(不使用)的变量_, figs = plt.subplots(1, len(images), figsize=(12, 12))for f, img, lbl in zip(figs, images, labels):img = np.squeeze(img).numpy()# (3, 28, 28)image = np.array([img, img, img])# (3, 28, 28) → (28, 28, 3)f.imshow(np.transpose(image, (1, 2, 0)))f.set_title(lbl)f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)plt.show()# 完成了torch.utils.data.DataLoader的功能
X, y = [], []
for i in range(10):X.append(mnist_train[i][0])y.append(mnist_train[i][1])
show_fashion_mnist(X, get_fashion_mnist_labels(y))

4)期望结果

  • 最后终于得到了想要的黑白图像啦!

三、参考

【小记】RGB图像转换为BGR-详细讲解了如何手动将RGB图像转换为BGR图像
python将两个二维array叠加成三维array的实现方法

【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)相关推荐

  1. 谷歌利用深度学习结合荧光标记,准确预估显微图像

    文章来源:ATYUN AI平台 在生物学和医学领域,显微技术为研究人员提供人肉眼无法观察到的细胞和分子的细节.透射光显微镜能够将生物样本在一边被照亮且成像,技术相对简单,生物样本耐受度高,然而缺点是产 ...

  2. 图像配准的前世今生:从人工设计特征到深度学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 机器之心编译 参与:Nurhachu Null,Geek AI 作 ...

  3. 深度学习数据增强方法,利用仿射变换实现图像进行各种操作如平移、缩放、旋转、翻转

    导读 在深度学习的数据增强中,我们经常需要对图像进行各种增强操作如平移.缩放.旋转.翻转等,这些其实都是图像的仿射变换.通过本篇文章,你能够知道它们的实现原理以及如何应用它们.本文讲述如何通过仿射变换 ...

  4. 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化

    图像协方差矩阵 by hadrienj 由hadrienj The goal of this post is to go from the basics of data preprocessing t ...

  5. 【深度学习】利用CNN来检测伪造图像

    随着像Facebook和Instagram这样的社交网络服务的出现,在过去十年中产生的图像数据量有一个巨大增加.使用图像(和视频)等处理软件GNU Gimp,Adobe Photoshop创建修改过的 ...

  6. [人工智能-深度学习-61]:生成对抗网络GAN - 图像融合的基本原理与案例

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  7. 《动手学深度学习》Task09:目标检测基础+图像风格迁移+图像分类案例1

    1 目标检测基础 1.1 目标检测和边界框(9.3) %matplotlib inline from PIL import Imageimport sys sys.path.append('/home ...

  8. 【深度学习】用变分自编码器生成图像和生成式对抗网络

    目录 问题描述: 代码展示: VAE代码段 GAN部分(仅供参考) 运行截图: 参考: 问题描述: 从图像的潜在空间中采样,并创建全新图像或编辑现有图像,这是目前最流行也是最成 功的创造性人工智能应用 ...

  9. 获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像

    超分辨率(SR)是一种提高图像分辨率的技术. 这些方法是从低分辨率(LR)图像中获得高分辨率(HR)输出.执行单图像超分辨率(SISR)的目的是在增加图像尺寸的同时使其质量下降的最小.应用范围很广,如 ...

最新文章

  1. JQuery中的层级选择器
  2. Java笔记-腾讯验证码平台使用实例
  3. c# linux 效率,c# – linux / mono上的HTTP性能
  4. 通过样式调整input 中password text默认长度
  5. 工程数学(数值分析)第五讲:数据拟合
  6. linux配置libpng环境变量_不同操作系统下 jdk 的配置
  7. python基础语法篇——输入与输出
  8. 廖雪峰Git学习 | 笔记五:撤销修改
  9. excel中提取中文拼音
  10. Rational Rose 2007安装使用教程
  11. 简单工厂模式在Logback源码以及JDK源码中的应用
  12. DICOM医学影像协议
  13. 华硕无畏15i 2023评测 华硕无畏15i 2023值得入手吗
  14. 上海税务局发布2023年第1号文件,全电发票开票试点即将全面扩围!
  15. 虚拟机安装Ubuntu后的问题(不能全屏、不能上网;换源挂代理;安装搜狗输入法;pycharm的sudo模式启动快捷方式)
  16. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
  17. 硬件基础知识(9)---电容容量、尺寸及作用
  18. word2013插入excel对象报错_教大家Excel2013如何插入对象文件
  19. 学习记录贴2:libpng16.so.16找不到,libc.so.6找不到
  20. 1934: [Shoi2007]Vote 善意的投票

热门文章

  1. 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
  2. Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
  3. 第7课用计算机写作文优质课例,有趣的电脑课作文9篇
  4. 使用openpyxl 对Excel的简单操作
  5. (附源码)springboot电商系统前端界面设计与浏览器兼容性研究 毕业设计 231058
  6. java 读取url获取的xml
  7. 忆阻器类脑芯片与人工智能
  8. 南阳理工acm71 独木舟上的旅行(贪心简单题)
  9. 软件扫描出rsh漏洞,但是并无安装rsh服务,原因是为何?
  10. From Nand to Tetris Week2 2021 超详细笔记