图像加载问题
使用pytorch制作图像数据集时,需要将存储在磁盘、硬盘的图像读取到内存中,涉及到图像I/O问题。

在python中,图像处理主要采用的库:skimage, opencv-python, Pillow (PIL)。 这三个库均提供了图像读取的方法。

开发/实验环境
Ubuntu 18.04
pycharm
pytorch1.0, opencv-python 3.4.3,skimage, numpy,PIL
实验内容
读取图像
准备一张测试图像,彩色32bit

dog.jpg
import matplotlib.pyplot as plt
import skimage.io as io
import cv2
from PIL import Image
import numpy as np
import torch

dog.jpg width = 1599, height=1066, channel=3

使用skimage读取图像

img_skimage = io.imread('dog.jpg')        # skimage.io imread()-----np.ndarray,  (H x W x C), [0, 255],RGB
print(img_skimage.shape)

使用opencv读取图像

img_cv = cv2.imread('dog.jpg')            # cv2.imread()------np.array, (H x W xC), [0, 255], BGR
print(img_cv.shape)

使用PIL读取

img_pil = Image.open('dog.jpg')         # PIL.Image.Image对象
img_pil_1 = np.array(img_pil)           # (H x W x C), [0, 255], RGB
print(img_pil_1.shape)plt.figure()
for i, im in enumerate([img_skimage, img_cv, img_pil_1]):ax = plt.subplot(1, 3, i + 1)ax.imshow(im)plt.pause(0.01)

显示图像:
从左到右分别为skimage, cv2, PIL 读取之后显示的图像。PIL读取的图像为PIL.Image.Image对象,无法用matplotlib直接显示,需要先转为numpy.ndarray对象。
图1,图3显示正常,图像显示不正常,因为opencv读取的图像为BGR格式,matplotllib使用RGB方式显示,图像通道顺序不一致。

image.png
图像转为torch.Tensor对象
在深度学习中,原始图像需要转换为深度学习框架自定义的数据格式,在pytorch中,需要转为torch.Tensor。
pytorch提供了torch.Tensor 与numpy.ndarray转换为接口:

方法名 作用
torch.from_numpy(xxx) numpy.ndarray转为torch.Tensor
tensor1.numpy() 获取tensor1对象的numpy格式数据
torch.Tensor 高维矩阵的表示: (nSample)x C x H x W

numpy.ndarray 高维矩阵的表示: H x W x C
因此在两者转换的时候需要使用numpy.transpose( ) 方法 。

Code


```python
# ------------np.ndarray转为torch.Tensor------------------------------------
# numpy image: H x W x C
# torch image: C x H x W
# np.transpose( xxx,  (2, 0, 1))   # 将 H x W x C 转化为 C x H x W
tensor_skimage = torch.from_numpy(np.transpose(img_skimage, (2, 0, 1)))
tensor_cv = torch.from_numpy(np.transpose(img_cv, (2, 0, 1)))
tensor_pil = torch.from_numpy(np.transpose(img_pil_1, (2, 0, 1)))
#torch.Tensor转numpy.ndarray
#np.transpose( xxx,  (2, 0, 1))   # 将 C x H x W 转化为 H x W x Cimg_skimage_2 = np.transpose(tensor_skimage.numpy(), (1, 2, 0))
img_cv_2 = np.transpose(tensor_cv.numpy(), (1, 2, 0))
img_pil_2 = np.transpose(tensor_pil.numpy(), (1, 2, 0))plt.figure()
for i, im in enumerate([img_skimage_2, img_cv_2, img_pil_2]):ax = plt.subplot(1, 3, i + 1)ax.imshow(im)plt.pause(0.01)

显示:

image.png
opencv图像BGR->RGB操作
opencv默认读取的图像为BGR形式,可以使用opencv提供的方法:cv2.cvtColor( ) 进行图像颜色空间转换

opencv 读取的图像为BGR

首先需要转为RGB

img_cv = cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB)

转torch.Tensor

tensor_cv = torch.from_numpy(img_cv)

tensor转numpy

img_cv_2 = tensor_cv.numpy()
plt.figure()
plt.title('cv')
plt.imshow(img_cv_2)
plt.show()

显示:

image.png
End

作者:侠之大者_7d3f
链接:https://www.jianshu.com/p/cfca9c4338e7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

torch读图 原作者:侠之大者_7d3f 链接:https://www.jianshu.com/p/cfca9c4338e7相关推荐

  1. 首次超越人类!“读图会意”这件事,AI比你眼睛更毒辣 | 达摩院

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在超越人类这件事上,AI 又拿下一分. 就在最近,国际权威机器视觉问答榜单VQA Leaderboard,更新了一项数据: AI在" ...

  2. 一键读图OCR 轻松搞定任意网页上出现的文字提取

    谷歌Chrome浏览器 有个插件:一键读图OCR 用谷歌浏览器打开以下链接,点击 添加扩展, 直接安装即可. https://chrome.google.com/webstore/detail/%E4 ...

  3. Halcon读图出错怎么办?ReadImage常见错误与处理方法(C++)

    点击下方卡片,关注"OpenCV与Halcon视觉"公众号. 视觉/图像重磅干货,第一时间送达! 导读 本文主要介绍Halcon读取读取图片算子read_image使用时可能出现的 ...

  4. GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福

    [导读]OpenAI的GPT-4在万众瞩目中闪亮登场,多模态功能太炸裂,简直要闪瞎人类的双眼.李飞飞高徒.斯坦福博士Jim Fan表示,GPT4凭借如此强大的推理能力,已经可以自己考上斯坦福了! 果然 ...

  5. Allan方差读图分析IMU误差指标

    1.Allan方差公式推导 IMU噪声参数辨识-艾伦方差 - 知乎前言在统计学中描述随机变量的两个经典参数是均值和方差,早期在定量表征原子钟的频率稳定度时采用的就是经典方差方法.1996年,学者D.W ...

  6. 利用OpenCV读图绘制栅格导航

    利用OpenCV读图绘制栅格导航 实现效果 利用PC的绘图工具预处理图像 利用OpenCV识别图像得出障碍点信息 图像像素row和col的解释 查看图像数据 将index数据导入MATLAB绘制栅格 ...

  7. C++读图txt文件,并将数据结构 图显示出来

    目录 整个代码展示 下面分别是图的两个txt文件,现在用C++读取这个文件,并将图显示出来 第一行分别表示图的节点数和边数 13 13 0 5 4 3 0 1 9 12 6 4 5 4 0 2 11 ...

  8. pickel加速caffe读图

    64*64*3小图(12KB),batchSize=128,训练样本100万, 全部load进来内存受不了,load一次需要大半天 训练时读入一个batch,ali云服务器上每个batch读入时间1. ...

  9. 自学python(2):利用opencv实现读图,显示,画框,裁剪的python代码

    #读图,显示的代码 import cv2 # 读取图像 img = cv2.imread(r'C:/labs/opencvtest/1.jpg', cv2.IMREAD_COLOR) #第一个参数是路 ...

最新文章

  1. 最近工作好忙,自己的软件又得落下很长一段时间了~
  2. python 画三维函数图-Python之Numpy:二元函数绘制/三维数据可视化/3D
  3. c++ new[] delete[]底层分析
  4. Servlet 单例多线程
  5. Fibonacci in the Pocket
  6. JavaScript 音频处理库 pico.js
  7. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体
  8. 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...
  9. ftp服务器在线浏览,ftp服务器PDF文件在线查看的实现方法
  10. MySQL学习笔记_10_MySQL高级操作(下)
  11. 网红奶茶雪糕高价背后,到底是真好吃还是智商税
  12. bzoj 2431: [HAOI2009]逆序对数列
  13. 《MPLS在Cisco IOS上的配置》一2.3 配置命令参考
  14. 发票勾选平台:验证口令失败--加密模块未打开(0x23) (错误代码:35)
  15. win7网上邻居_CentOS7 Linux访问Win7的共享文件夹
  16. 动态规划之钢条切割问题——Rod-cutting problem
  17. 肥鲨HDO和HD3买哪个?
  18. HADOOP安装指南-Ubuntu15.10和hadoop2.7.2
  19. AspectJ 学习笔记
  20. [Windows] 获取设备唯一标识

热门文章

  1. Serverless 是云时代软件架构的未来么?
  2. Python流体动力学共形映射库埃特式流
  3. 通俗理解Hilbert希尔伯特空间
  4. flex+FluorineFx ASP.NET 视频拍照
  5. 点亮你的LCD!(linux原子哥)
  6. 时间序列数据趋势分析 Cox-Stuart、Mann-Kendall、Dickey-Fuller
  7. python五环,python图形绘制奥运五环实例讲解
  8. 中国合成树脂行业“十三五”发展回顾及“十四五”前景展望「图」
  9. 拼多多商品详情接口测试及申请
  10. a股交易数据接口-API-说明