Python图像处理
这个是对于 COVID-19 分类任务结束的一个回顾。第一次完成这个图像相关的任务,基本上是一头雾水。在这一次过程中遇到了很多处理的方法,在这里列出来,方便后面使用。
读取以及格式转换
图像处理一般使用 OpenCV 及 PIL.Image 两个库。
导入
1 | import cv2 |
图像的读取与保存
1 | img = cv2.imread("pic.jpg", flags) |
关于 flags:
- cv2.IMREAD_COLOR:读取一副彩色图片,图片的透明度会被忽略,默认为该值,实际取值为 1;
- cv2.IMREAD_GRAYSCALE:以灰度模式读取一张图片,实际取值为 0
- cv2.IMREAD_UNCHANGED:加载一副彩色图像,透明度不会被忽略。
以及文件名需要声明为 .jpg / .png 类似的格式才行。
与 Numpy 互换
事实上,cv2 导出的数据就是 np.array,例如对于彩色图像是(x, x, 3)的矩阵。而 Image 读出的是 Image 数据,需要转换:
1 | img = Image.fromarray(data) # 从array到Image |
基本操作
裁剪
1 | img = img.crop((x0, y0, x1, y1)) |
传入的是一个数组,标明左上角 x0, y0 及右下角 x1, y1。而由于 cv2 本质上是 np.array,所以可以使用 array 的操作完成。
Resize
Resize 是一个相当常用的函数。
1 | img = img.resize((256, 256), Image.ANTIALIAS) |
后面是可选项。
深度学习相关
直方图均衡化
1 | img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 先转化为灰度图 |
随机变形
1 | import torchvision.transforms as tfs |
调用时使用即可:1
img = transform(img)