php 读取图片bgr,图像的6种读取方式

# verify_channel.png 的shape为(10,5,3),沿着通道维度的第1,2,3(r,g,b)通道,都是 10x5的二维矩阵,每个矩阵的各处值相等,分别为:0,100,125

# method 1: PIL 中的 Image函数,PIL.Image.open()读入不是array()格式,这时候需要用 np.asarray()或者np.array()函数

# 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

print('### PIL.Image:--------------------------')

from PIL import Image

import numpy as np

I = Image.open('./verify_channel.png') # 读取的方式为 RGB 顺序,所以三通道分别为 RGB

#I.show() # 读入的图片可以直接通过这种方式显示

#I.save("./save.png") # 和保存图片

print('变array之前,I.type: %s'%type(I)) #

I = np.array(I)

print('I.type:',type(I)) #

print('I.shape: ',I.shape) # (H, W, C)

print('PIL.Image: ',I[0,:,:]) # [ 0 100 255]

print('I.min(): %s, I.max(): %s'%(I.min(),I.max())) # [0, 255]

import matplotlib.pyplot as plt # matplotlib 使用 RGB 方式显示。

plt.imshow(I[:,:,:], cmap='gray')

plt.show()

# method 2: matplotlib.pyplot.imread 即 plt.imread()

print('### plt.imread:--------------------------')

import matplotlib.pyplot as plt

I = plt.imread('./verify_channel.png')

print('I.type:',type(I)) #

print('I.shape: ',I.shape) # (H, W, C)

print('PIL.Image: ',I[0,:,:]) # R,G,B

print('I.min(): %s, I.max(): %s'%(I.min(),I.max())) # [0, 1]

plt.imshow(I)

plt.show()

# method 3 : matplotlib.image 读取图片, 读入就是 array() 格式

# 利用matplotlib.pyplot as plt用于显示图片

print('### matplotlib.pyplt:--------------------------')

import matplotlib.pyplot as plt

import matplotlib.image as mping

I = mping.imread('./verify_channel.png')

print('I.type: ',type(I))

print('I.shape: ',I.shape) # (H, W, C)

print('matplotlib.image: ',I[1,:,:])

print('I.min(): %s, I.max(): %s'%(I.min(),I.max())) # 注意:一种读取方式读入不同的格式图像范围不一定一样: png:[0,1] jpg:[0, 255]

plt.imshow(I)

plt.show()

# method 4: 利用opencv-python接口

# cv2.imread()读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的, 想要使用

print('### opencv:-----------------------------')

import cv2

I = cv2.imread('./verify_channel.png')

print('I.type: ',type(I))

print('I.shape: ',I.shape) # (H, W, C),不过沿着 C轴是 B,G,R三通道

print('matplotlib.image: ',I[1,:,:]) # 读入通道的顺序为 B G R

print('I.min(): %s, I.max(): %s'%(I.min(),I.max()))

plt.imshow(I) # 直接使用plt.imshow() 会让显示失真

plt.show()

I = np.array([I[:,:,2], I[:,:,1], I[:,:,0]]).transpose((1,2,0)) # 交换0和2通道才能使用plt.inshow()正常显示

plt.imshow(I)

plt.show()

# method 5: 使用 scipy 库,scipy.misc 读入

# 图像的存取我一般喜欢用scipy这个库里的东西,读出来是矩阵形式,并且scipy.misc.imsave()按照(H,W,C)形式保存

print('### scipy.misc:-----------------------------')

from scipy import misc

import scipy

I = misc.imread('verify_channel.png')

# scipy.misc.imsave('./save1.png', I)

print('I.type: ',type(I))

print('I.shape: ',I.shape)

print('matplotlib.image: ',I[1,:,:]) # 读入通道的顺序为 R G B

print('I.min(): %s, I.max(): %s'%(I.min(),I.max()))

plt.imshow(I)

plt.show()

# method 6:使用 skimage 库(这个库很强大)的 io模块,顾名思义,这个模块是用来图片输入输出操作的。

print('### skimage.io:-----------------------------')

from skimage import io

I = io.imread('./verify_channel.png')

#io.imshow(img)

print('I.type: ',type(I))

print('I.shape: ',I.shape)

print('matplotlib.image: ',I[1,:,:]) # 读入通道的顺序为 R G B

print('I.min(): %s, I.max(): %s'%(I.min(),I.max()))

plt.imshow(I)

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值