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)
lina = cv2.imread('lina.jpg',0)
cv2.imshow(lina_RGB)
a=cv2.imread(‘图片路径名称.jpg’) 图片以array形式读入是BGR颜色格式
cv2.imshow(‘窗口名称’,要显示的像素矩阵)
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显示哦)
lina = np.array(Image.open('lina.jpg').convert('L'))#Lina变成一个array
Image.open('lina.jpg').show()#直接显示出来
a=Image.open(‘图像路径名称.jpg’) 打开得到的这个对象a只是一个图像文件
a.show() 把这个图像文件显示出来
a.load() 可以对这个对象操作了
a.save(‘图片保存的路径.jpg’)
np.array(a) 把这个对象转换成array数组
可以显示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(像素矩阵名