cv2 和 matplotlib.pyplot 和 PIL.Image 读取图片方式对比【Python读取图片】
文章目录
- 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读取图片】相关推荐
- 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法
python 读取.保存.二值化.灰度化图片+opencv处理图片的方法 进行手写数字的图片预测的时候碰到了这样的问题. 先说说处理图片有三种方式 一.matplotlib 二.PIL 三.openc ...
- python读取txt文件写入-python 读取、写入txt文件的示例
写入文件 使用open()函数和write()函数 但是有两种写法,分别是'a'和'w' 'a' 表示写入文件 若无该文件会直接创建一个 如果存在这个文件,会接着已有的内容的后面写入 with ope ...
- python读取大文件-使用Python读取大文件的方法
背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...
- python读取中文txt文本-python读取中文txt文本的方法
对于python2.7 字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unico ...
- python读取excel指定列-Python读取excel指定列生成指定sql脚本的方法
需求 最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用update这样的语句替换掉. 例如: 有个A库,其中有两个A.01 ...
- python逐行读取json_如何用python读取json文件里指定的数据
JSON文件who.json内容如下:{"name":"mss","version":"1.0.0","des ...
- python txt默认读取字符还是行,python读取中文txt文本的方法
字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unicode编码成另一种编码. ...
- python读取word的方法,Python读取Word(.docx)正文信息的方法
Python读取Word(.docx)正文信息的方法 本文介绍用Python简单读取*.docx文件信息,一些python-word库就是对这种方法的扩展. 介绍分两部分: Word(*.docx)文 ...
- python读取excel一列-python读取excel(xlrd)
一.安装xlrd模块: 1.mac下打开终端输入命令: pip install xlrd 2.验证安装是否成功: 在mac终端输入 python 进入python环境 然后输入 import xlrd ...
最新文章
- Rust 1.30带来更多元编程支持,并改进了模块系统
- 解压zip文件出现-bash:unzip:commond not found
- 有BUG!!!慎用default文本
- Xcode缓存数据清除
- 前端学习(2550):事件指令解析
- 阿里开源首个深度学习框架 X-Deep Learning!
- 电信业的100个随想
- python找思路_python 爬取贝壳的一些思路和方法设计(用地址找到小区名字)
- MyCat双机HA高可用集群搭建_HAProxy安装和配置---MyCat分布式数据库集群架构工作笔记0028
- 聚焦BCS|北京网络安全大会产业峰会:探寻产业规模增长之道
- 今日力推: Android 厨客APP / Android 趣刻App
- 11/27 记事本
- 计算机应用基础实操题怎么操,计算机基础实操试题
- 计算机ip 地址异常,电脑显示IP地址错误怎么办|电脑无法上网提示IP地址错误的解决方法...
- 华硕T100 安装linux,【华硕T100TA3740评测】双硬盘组合 华硕T100TA挑战存储极限(全文)_华硕 T100TA3740_笔记本评测-中关村在线...
- 鸽主姓名查询成绩_获奖鸽主姓名,名次及足环号码
- 计算机网络第七版(谢希仁)第三章——数据链路层课后习题答案
- matlab 软键盘,(转载)DIY激光虚拟键盘低成本自制【全面讲解二】
- android button 字母自动变大写的解决
- 用于CTF(MISC)的kali虚拟机更改过程记录