图:1.jpg
PIL库
安装库
pip install pil
导入库
from PIL import Image
读取文件
img = Image.open('1.jpg') # 使用pil库读取图片
显示图片
img.show() # 显示图片
保存图片
img.save("1.1.jpg") # 保存
转换为数组
np.array(img)
print(np.array(img).shape) # 太长了就不展示了直接看数组的维度吧
(121, 121, 3)
PIL分离颜色通道
img.getchannel(0) # 括号里面0,1,2就是对应的通道 r, g, b = img.split() # r, g, b就是对应的通道
图片裁剪
r.crop((50, 50, 128, 128)) # 对应着4个点的像素坐标
三通道的彩色图(RGB),还有四通道的(RGBA)
OpenCV库(cv2)
读取图片
img = cv2.imread('1.jpg', 3) # 0,1,2代表对应的通道,3代表3通道
print(img.shape)
(121, 121, 3)
显示图片
cv2.imshow('image', img) # 显示图片 cv2.waitKey(1500) # 显示图片时长(单位毫秒)0则是一直显示
把维度进行 转换
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将彩色图的BGR通道顺序转成RGB
OpenCV读取的BGR通道顺序其他的库是RGB通道顺序,需要进行修改(比如用plt显示)
通道分割
b, g, r = cv2.split(img)
g通道:
通道合并
img = cv2.merge((b, g, r))
大小缩放
img = cv2.resize(img, (400, 500))
翻转及旋转
参数2 = 0:垂直翻转(沿x轴),参数2 > 0: 水平翻转(沿y轴),参数2 < 0: 水平垂直翻转。
img = cv2.flip(img, 2, 2)
平移图片
要平移图片,我们需要定义下面这样一个矩阵,tx,ty是向x和y方向平移的距离:
平移是用仿射变换函数cv2.warpAffine()实现的:
rows, cols = img.shape[:2] # 获得图片的高、宽 M = np.float32([[1, 0, 20], [0, 1, 40]]) # x轴平移20,y轴平移40 img = cv2.warpAffine(img, M, (cols, rows))
划线:
# 画一条线宽为5的蓝色直线,参数2:起点,参数3:终点 cv2.line(img, (0, 0), (60, 120), (255, 255, 0), 5)
画矩形:
img = cv2.rectangle(img, (40, 40), (80, 80), (0, 255, 0),2)
颜色空间转换
最常用的颜色空间转换如下:
- RGB或BGR到灰度(COLOR_RGB2GRAY,COLOR_BGR2GRAY)
- RGB或BGR到YcrCb(或YCC)(COLOR_RGB2YCrCb,COLOR_BGR2YCrCb)
- RGB或BGR到HSV(COLOR_RGB2HSV,COLOR_BGR2HSV)
- RGB或BGR到Luv(COLOR_RGB2Luv,COLOR_BGR2Luv)
- 灰度到RGB或BGR(COLOR_GRAY2RGB,COLOR_GRAY2BGR)
经验之谈:颜色转换其实是数学运算,如灰度化最常用的是:gray=R0.299+G0.587+B*0.114。
特殊报错
如上图:是图片导入异常导致的请查看图片的路径
matplotlib库
导入
import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片
读取文件
img = mpimg.imread('1.jpg')
显示文件
plt.imshow(img) # plt.axis('off') # 不显示坐标轴 plt.show()
显示某个通道
img_1 = img[:, :, 0]
这个是热度图
plt.imshow(img_1, cmap='Greys_r') # 转换成灰度图 ### 或者 img = plt.imshow(img_1) img.set_cmap('gray') # 'hot' 是热量图 plt.show()
对图像处理的几个类库进行了简单的解析。