文章目录

  • import matplotlib.pyplot as plt 和 cv2 读取图像对比
  • PIL 和 cv2 读取图片对比
  • mxnet.image.imread 读取图片
  • PIL 和 torchvision.transforms 预处理图像 【pytorch】
  • pytorch 后处理图片常用方法
    • pytorch 模型实例化 推理示例

import matplotlib.pyplot as plt 和 cv2 读取图像对比


  • cv2.imread(imagepath) 读取图片默认为 BGR mode 的 numpy 格式
  • matplotlib.pyplot.imread(imagepath) 默认为 RGB mode 的 numpy 格式

import matplotlib.pyplot as plt
import numpy as np
import cv2imagepath = 'dog.jpg'
print(" matplotlib.pyplot  读取图像  RGB \n")
plot_img = plt.imread(imagepath)
print(type(plot_img))
print(plot_img.size)
print(plot_img.shape)
print(plot_img[0])
plt.imsave("plt_img.png",plot_img)print(" \n plot_img RGB 转 BGR  \n")
plot_img2BGR_CV = cv2.cvtColor(plot_img, cv2.COLOR_RGB2BGR)
print(plot_img2BGR_CV[0])print(" opencv 读取图像  BGR \n")
CV_img = cv2.imread(imagepath)print(type(CV_img))
print(CV_img.shape)
print(CV_img[0])
cv2.imwrite("CV_img.png",CV_img)
exit(0)

输出如下

 matplotlib.pyplot  读取图像  RGB <class 'numpy.ndarray'>
1327104
(576, 768, 3)
[[ 57  58  50][ 58  59  51][ 60  61  53]...[143  89  43][ 89  49  41][ 65  70  47]]plot_img RGB 转 BGR  [[ 50  58  57][ 51  59  58][ 53  61  60]...[ 43  89 143][ 41  49  89][ 47  70  65]]opencv 读取图像  BGR <class 'numpy.ndarray'>
(576, 768, 3)
[[ 50  58  57][ 51  59  58][ 53  61  60]...[ 47  89 142][ 41  50  88][ 47  71  63]]


PIL 和 cv2 读取图片对比


  • cv2.imread(imagepath) 读取图片默认为 BGR mode 的 numpy 格式
  • PIL.Image.open(imagepath) 打开图片,是 RGB mode 的图片格式
  • PIL.Image.open 读取的图片,转 numpy 再 RGB2BGR 则和 cv2.imread 一致
from PIL import Image
import cv2imagepath = 'dog.jpg'
# opencv 读取图像
CV_img = cv2.imread(imagepath)print(type(CV_img))
print(CV_img.shape) # (h、w、c)
print(CV_img[0])# PIL.Image 读取图片
PIL_img = Image.open(imagepath)print(type(PIL_img))
print(PIL_img.size) # (w、h)
print(PIL_img.mode)PIL_img2np = np.array(PIL_img)
print(PIL_img2np[0])
print(PIL_img2np.shape)
print("PIL_img 转 numpy 再 RGB2BGR 之后: ")
BRG_CV = cv2.cvtColor(PIL_img2np, cv2.COLOR_RGB2BGR)
print(BRG_CV[0])
exit(0)

输出如下

# cv2.imread(imagepath)
<class 'numpy.ndarray'>
(576, 768, 3)
[[ 50  58  57][ 51  59  58][ 53  61  60]...[ 47  89 142][ 41  50  88][ 47  71  63]]#PIL Image.open(imagepath)<class 'PIL.JpegImagePlugin.JpegImageFile'>
(768, 576)
RGB
[[ 57  58  50][ 58  59  51][ 60  61  53]...[143  89  43][ 89  49  41][ 65  70  47]]
(576, 768, 3)# PIL_img 转 numpy 再 RGB2BGR 之后: [[ 50  58  57][ 51  59  58][ 53  61  60]...[ 43  89 143][ 41  49  89][ 47  70  65]]

调试分析如下


mxnet.image.imread 读取图片


import mxnet as mxpath= 'dog.jpg'# 该方法 内部使用 openCV 读取图像 ; 那么读取的图 应该会是  BGR 格式 【盲猜】img = mx.image.imread(path)
print(img.shape)



PIL 和 torchvision.transforms 预处理图像 【pytorch】


from torchvision import transforms
from PIL import Imageimagepath = 'dog.jpg'# PIL.Image 读取图片
PIL_img = Image.open(imagepath)
test_transform = transforms.Compose([transforms.Resize((256, 256)),transforms.ToTensor(),transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))])print(type(PIL_img))
print(PIL_img)
print(PIL_img.size) # (w,h)
print(PIL_img.mode)# 经过 torchvision.transforms 预处理之后的数据类型 是一个 Tensor
image = test_transform(PIL_img)
print(type(image))
print(image.shape)exit(0)

输出如下

<class 'PIL.JpegImagePlugin.JpegImageFile'>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x576 at 0x7FF0FA173350>
(768, 576)
RGB<class 'torch.Tensor'>
torch.Size([3, 256, 256])

pytorch 后处理图片常用方法


这里用到了 scipy 【代码摘自 – https://github.com/alpc91/NICE-GAN-pytorch/blob/master/utils.py】

from scipy import misc
import os, shutil, cv2, torch
import numpy as npdef load_test_data(image_path, size=256):img = misc.imread(image_path, mode='RGB')img = misc.imresize(img, [size, size])img = np.expand_dims(img, axis=0)img = preprocessing(img)return imgdef preprocessing(x):x = x/127.5 - 1 # -1 ~ 1return xdef save_images(images, size, image_path):return imsave(inverse_transform(images), size, image_path)def inverse_transform(images):return (images+1.) / 2def imsave(images, size, path):return misc.imsave(path, merge(images, size))def merge(images, size):h, w = images.shape[1], images.shape[2]img = np.zeros((h * size[0], w * size[1], 3))for idx, image in enumerate(images):i = idx % size[1]j = idx // size[1]img[h*j:h*(j+1), w*i:w*(i+1), :] = imagereturn imgdef check_folder(log_dir):if os.path.exists(log_dir):shutil.rmtree(log_dir)os.makedirs(log_dir)return log_dirdef str2bool(x):return x.lower() in ('true')def cam(x, size = 256):x = x - np.min(x)cam_img = x / np.max(x)cam_img = np.uint8(255 * cam_img)cam_img = cv2.resize(cam_img, (size, size))cam_img = cv2.applyColorMap(cam_img, cv2.COLORMAP_JET)return cam_img / 255.0def imagenet_norm(x):mean = [0.485, 0.456, 0.406]std = [0.299, 0.224, 0.225]mean = torch.FloatTensor(mean).unsqueeze(0).unsqueeze(2).unsqueeze(3).to(x.device)std = torch.FloatTensor(std).unsqueeze(0).unsqueeze(2).unsqueeze(3).to(x.device)return (x - mean) / stddef denorm(x):return x * 0.5 + 0.5def tensor2numpy(x):return x.detach().cpu().numpy().transpose(1,2,0)def RGB2BGR(x):return cv2.cvtColor(x, cv2.COLOR_RGB2BGR)

pytorch 模型实例化 推理示例

只是一个示例整理,无法运行 【用到了上面预处理和后处理相关方法】


from PIL import Image
import os
from model import WaterRemove# 实例化 模型对象
gan = niceGAN(args)
gan.build_model()
gan.load()# 读取数据
img_path = 'dataset/test25/0.jpg'
image = Image.open(img_path)# 预处理
image = test_transform(img).unsqueeze(0)# torch 模型 推理 输入为 Tensor , 这里的输出为 Tensor 格式图像
fake_A2B = gan.deal(image)# 后处理[ 解析 Tensor ]
A2B = RGB2BGR(tensor2numpy(denorm(fake_A2B[0])))
res_img = cv2.resize(A2B * 255.0, image.size)
cv2.imwrite(os.path.join('results/test_cv.jpg'), res_img)

持续更新…


cv2 和 matplotlib.pyplot 和 PIL.Image 读取图片方式对比【Python读取图片】相关推荐

  1. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法

    python 读取.保存.二值化.灰度化图片+opencv处理图片的方法 进行手写数字的图片预测的时候碰到了这样的问题. 先说说处理图片有三种方式 一.matplotlib 二.PIL 三.openc ...

  2. python读取txt文件写入-python 读取、写入txt文件的示例

    写入文件 使用open()函数和write()函数 但是有两种写法,分别是'a'和'w' 'a' 表示写入文件 若无该文件会直接创建一个 如果存在这个文件,会接着已有的内容的后面写入 with ope ...

  3. python读取大文件-使用Python读取大文件的方法

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  4. python读取中文txt文本-python读取中文txt文本的方法

    对于python2.7 字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unico ...

  5. python读取excel指定列-Python读取excel指定列生成指定sql脚本的方法

    需求 最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用update这样的语句替换掉. 例如: 有个A库,其中有两个A.01 ...

  6. python逐行读取json_如何用python读取json文件里指定的数据

    JSON文件who.json内容如下:{"name":"mss","version":"1.0.0","des ...

  7. python txt默认读取字符还是行,python读取中文txt文本的方法

    字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unicode编码成另一种编码. ...

  8. python读取word的方法,Python读取Word(.docx)正文信息的方法

    Python读取Word(.docx)正文信息的方法 本文介绍用Python简单读取*.docx文件信息,一些python-word库就是对这种方法的扩展. 介绍分两部分: Word(*.docx)文 ...

  9. python读取excel一列-python读取excel(xlrd)

    一.安装xlrd模块: 1.mac下打开终端输入命令: pip install xlrd 2.验证安装是否成功: 在mac终端输入 python 进入python环境 然后输入 import xlrd ...

最新文章

  1. Rust 1.30带来更多元编程支持,并改进了模块系统
  2. 解压zip文件出现-bash:unzip:commond not found
  3. 有BUG!!!慎用default文本
  4. Xcode缓存数据清除
  5. 前端学习(2550):事件指令解析
  6. 阿里开源首个深度学习框架 X-Deep Learning!
  7. 电信业的100个随想
  8. python找思路_python 爬取贝壳的一些思路和方法设计(用地址找到小区名字)
  9. MyCat双机HA高可用集群搭建_HAProxy安装和配置---MyCat分布式数据库集群架构工作笔记0028
  10. 聚焦BCS|北京网络安全大会产业峰会:探寻产业规模增长之道
  11. 今日力推: Android 厨客APP / Android 趣刻App
  12. 11/27 记事本
  13. 计算机应用基础实操题怎么操,计算机基础实操试题
  14. 计算机ip 地址异常,电脑显示IP地址错误怎么办|电脑无法上网提示IP地址错误的解决方法...
  15. 华硕T100 安装linux,【华硕T100TA3740评测】双硬盘组合 华硕T100TA挑战存储极限(全文)_华硕 T100TA3740_笔记本评测-中关村在线...
  16. 鸽主姓名查询成绩_获奖鸽主姓名,名次及足环号码
  17. 计算机网络第七版(谢希仁)第三章——数据链路层课后习题答案
  18. matlab 软键盘,(转载)DIY激光虚拟键盘低成本自制【全面讲解二】
  19. android button 字母自动变大写的解决
  20. 用于CTF(MISC)的kali虚拟机更改过程记录

热门文章

  1. 基于Html+Bootstrap的高校智慧学习平台WEB界面设计
  2. Geneious 全面的分子生物学和序列分析工具套件
  3. C语言 队列(循环队列)
  4. 面试题:一个TCP连接可以发多少个HTTP请求?
  5. 利用Wireshark截取ICMP数据包,并对数据包进行解析
  6. powell法c/c++程序
  7. php中h语言是什么意思,stdio.h是什么意思?
  8. 《MySQL:演示数据库文件》
  9. 什么是数据库驱动?有哪几种jdbc驱动
  10. oracle数据库中用sql拼接字符串和转成clob存储在数据库中