cv2/PIL/matplot三种方式对图像读入与显示的区别|cv2.imshow()|image.open()|plt.imshow()

在pycharm中运行python 控制台

运行之后可以像matlab一样查看变量
在这里插入图片描述
在这里插入图片描述

cv2

1.读取显示彩色图片

import cv2
import numpy as np
import matplotlib.pyplot as plt
ina = cv2.imread('lina.jpg')
cv2.imshow('lina',lina)

运行结果:在这里插入图片描述
dtype类型是uint8
numpy数据类型:https://www.runoob.com/numpy/numpy-dtype.html
shape:20行220列3通道 view as array
在这里插入图片描述
在下面输入第几行,可以查看那一行的三个通道的所有列的像素值。
PS:
1.BGR形式
在这里插入图片描述
BGR转RGB

lina_RGB = cv2.cvtColor(lina,cv2.COLOR_BGR2RGB)
#或者这样转换也可以的
lina[:,:,[2,1,0]]#通道的顺序交换一下

颜色空间及cv2.cvtColor 转换函数https://www.aiuai.cn/aifarm365.html

总之,对于彩色图像而言,cv2读入的是BGR,显示的也是BGR,这样的话颜色才正常

lina_bgr=cv2.cvtColor(lina_RGB,cv2.COLOR_RGB2BGR)
cv2.imshow('1',lina_bgr)

2.读取灰度图片

lina = cv2.imread('lina.jpg'0)
cv2.imshow(lina_RGB)

在这里插入图片描述
二维矩阵 view as array
在这里插入图片描述
在这里插入图片描述

3.小结

a=cv2.imread(‘图片路径名称.jpg’) 图片以array形式读入是BGR颜色格式
cv2.imshow(‘窗口名称’,要显示的像素矩阵)

PIL

1.彩色图片

from PIL import Image #导入PIL库的Image类
import matplotlib.pyplot as plt
lina= Image.open('lina.jpg') #读取图像文件
lina.show()#显示图片
lina.save('lina4.png')保存这个图片文件对象
print(lina.mode)
RGB
print(lina.size)
(220, 220)
print(lina.format)
JPEG

当用Image.open打开一个图片文件,只会读取文件头信息来确定格式、颜色模式、大小等,文件其他数据不会处理,这种方式保证了图片操作性能

可以说Image.open是一个懒操作(只读文件头信息,直到图像操作才会读取整个图像数据),因此调用load()方法可以强行加载图像数据

iu = Image.open('iu.jpg')
iu = iu.load()
print(iu[0,1])
(133, 151, 135)

如果不对iu执行load()方法那么就无法读取某一处的像素值或者是修改某一处的像素值。

print(iu[0,0])
(131, 149, 133)
iu[0,0]=(1,1,1)
print(iu[0,0])
(1, 1, 1)

此时还不能view as array
要转换成array形式

import numpy as np
iu_array= np.array(Image.open('iu.jpg'))

在这里插入图片描述

iu_array.dtype
Out[18]: dtype('uint8')
iu.dtype
Traceback (most recent call last):
tributeError: 'PixelAccess' object has no attribute 'dtype'

dtype=uint8
shape (1034,909,3)

iu只是一个图像文件,用iu.show()可以显示出来
而iu.array是一个’numpy.ndarray’的对象了,就不能用iu_array.imshow来显示图片啦,可以用plt.imshow(iu_array)或者是cv2.imshow(‘2’,iu_array)(记得cv2是BGR显示哦)

2.灰度图片

lina = np.array(Image.open('lina.jpg').convert('L'))#Lina变成一个array
Image.open('lina.jpg').show()#直接显示出来

3.小结

a=Image.open(‘图像路径名称.jpg’) 打开得到的这个对象a只是一个图像文件
a.show() 把这个图像文件显示出来
a.load() 可以对这个对象操作了
a.save(‘图片保存的路径.jpg’)
np.array(a) 把这个对象转换成array数组

matplot

1.主要是用于显示

可以显示image.open()读入的图片格式

 iu =Image.open('iu.jpg')
 plt.imshow(lina)

可以显示一个array

import numpy as np
import matplotlib.pyplot as plt
A=np.zeros((128,128),dtype=int)
A[40:67,60:100]=1
plt.imshow(A);plt.title('A')

灰度图的显示

 iu =Image.open('iu.jpg')
 plt.imshow(lina,cmap='gray')

总结一下:

1.cv2.imread()读入,cv2.imshow()读出都是BGR格式
image.open()读入是RGB
2…cv2.imread()读入以array形式保存,cv2.imshow()也是把array显示
image.open()只是图片读取的状态,读入的不是array,要np.array()转换,要对对象执行.load()之后才能操作
3.plt主要用于显示
plt.imshow(像素矩阵名

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值