1.显示图片
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
picture = mpimg.imread('znj.jpg') # 读取和代码处于同一目录下的图片
plt.imshow(picture) # 显示图片
plt.axis('on') # 显示坐标轴
plt.show() #因为idle是pycharm所以多一行显示命令
效果图:
2.显示RGB某个通道
首先要明白array的格式:
以一张mn3的图片为例
'''[[[R11,G11,B11],[R12,G12,B12]...[R1n,G1n,B1n]]
[R21,G21,B21],[R22,G22,B22]...[R2n,G2n,B2n]]
. . .
. . .
. . .
[Rm1,Gm1,Bm1],[Rm2,Gm2,Bm2]...[Rmn,Gmn,Bmn]]]
'''
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
picture = mpimg.imread('znj.jpg') # 读取和代码处于同一目录下的图片
lena1 = picture*[0,0,1] # 显示图片的一个通道
lena2 = picture*[1,0,0]
lena3 = picture*[0,1,0]
plt.imshow(lena1) # 显示图片
plt.axis('on') # 显示坐标轴
plt.show() #因为idle是pycharm所以多一行显示命令
plt.imshow(lena2) # 显示图片
plt.axis('on') # 显示坐标轴
plt.show() #因为idle是pycharm所以多一行显示命令
plt.imshow(lena3) # 显示图片
plt.axis('on') # 显示坐标轴
plt.show() #因为idle是pycharm所以多一行显示命令
效果图:
3.RGB转灰度
方法一:
def rgb2gray1(rgb,m,n):
gray = np.zeros(shape=(m,n))
for x in range(0,m):
for y in range(0,n):
gray[x][y] = (rgb[x][y][0]*299 + rgb[x][y][1]*587 + rgb[x][y][2]*114 + 500) / 1000
return gray
m = picture.shape[0]
n = picture.shape[1]
gray_pro = rgb2gray1(picture,m,n)
plt.imshow(gray_pro,cmap = plt.get_cmap('gray'))
plt.axis('on') # 显示坐标轴
plt.show()
方法二:(最佳方案,运行速度快很多)
def rgb2gray2(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2] #数组切片
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
gray_pro = rgb2gray2(picture)
plt.imshow(gray_pro,cmap = plt.get_cmap('gray'))
plt.axis('on') # 显示坐标轴
plt.show()
效果图:
4.保存图片
plt.savefig('D:\\Mr.Zheng\\2.photo\\znj.jpg') #两个\防止编译器寻找转义字符