- 推荐一篇Opencv,scikit-image,PIL的简单对比总结:https://oldpan.me/archives/pytorch-transforms-opencv-scikit-image
PIL(Pillow)
左上角是坐标原点。
基于PILImage格式转灰度。
PIL使用ImageFilter可以简单做到图像的模糊、边缘增强、锐利、平滑等常见操作。
-
读取
from PIL import Image 读图方式 -> open(r'..\\----.jpg') # 读取为Image格式 保存图片 -> img.save(r'..\\----.jpg') 查看图像 -> img.show() # 调用系统默认图像查看软件,不支持numpy 查看图像大小 ->img.size # (1920, 1080) 缩放 -> img.resize()
-
读图-查看-保存
from PIL import Image img_path = r"C:\Users\Mint\Desktop\零散\202a492ab1463c906a4bb965ad24d566.jpg" img = Image.open(img_path) # img = img .convert('L') # 转灰度 size = img.size print('size',size) # (1920, 1080) img_crop = img.crop((750, 200, 1170, 1080)) # (x_start,y_start,x_end,y_end) img_crop_resize = img_crop.resize((100,200)) img_crop.save(r'C:\Users\Mint\Desktop\202a492ab1463c906a4bb965ad24d566.jpg') img_crop.show() # 调用系统默认图像查看软件
-
Image和numpy转换
img_array = np.asarray(img) img = Image.fromarray(img_array)
OpenCV
左上角是坐标原点。
可以将图像按照色域进行处理。
对图像做采样插值、边缘检测、形态学等处理。
-
读取
import cv2 读图方式 -> cv2.imread(img_path) # 读进来直接是numpy格式 查看图像 -> cv2.imshow('img', img_array) # 格式需numpy,tensor报错 保存图片 -> cv2.imwrite("...\\----.jpg",img_array)
-
读取-查看-鼠标交互输出像素值与坐标-保存
import cv2 import numpy as np img_path = 'C:\\Users\\Mint\\Desktop\\90e58f36fc1b0ae42443b69176cc2a75_r.jpg' img_array = cv2.imread(img_path) # img_array = img_array*255 # (反色调)变换后像素值 = 256 - 变换前像素值 img_array= cv2.cvtColor(img_array, cv2.COLOR_BGR2GRAY) # 转为灰度图 # img_array = np.where(img_array>100,255.0,0) # 必须是255.0,255显示全黑 print(type(img_array)) print(img_array.shape) # (128,128,3) def onmouse(event, x, y, flags, param): if event==cv2.EVENT_LBUTTONDOWN: print(img_array[y,x],[x,y]) # 像素值 坐标 cv2.namedWindow('img_array') cv2.setMouseCallback("img_array", onmouse) cv2.imshow('img_array', img_array) # 'img_array'必须保持一致 cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('C:\\Users\\Mint\\Desktop\\90e58f36fc1b0a.jpg',img_array)
matplotlib
左上角是坐标原点。
显示图片同时能随鼠标直接显示像素值及坐标。
-
读取
import matplotlib.pyplot as plt # 用于显示图片 import matplotlib.image as mpimg # 用于读取图片 读图方式 -> mpimg.imread(img_path) # 读进来直接是numpy格式 查看图像 -> plt.imshow(img_array) 保存图像 -> plt.imsave("...\\----.jpg",img_array) -> mpimg.imsave("...\\----.jpg",img_array) 保存显示 -> plt.savefig() # 必须在plt.show()前面
-
读取-转灰度-显示(灰度)-保存(多种方法)
import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np img_path = r'C:\Users\Mint\Desktop\psb.jpg' img_array = mpimg.imread(img_path) print('type',type(img_array)) # <class 'numpy.ndarray'> img_array = np.dot(img_array[...,:3], [0.299, 0.587, 0.114]) # RGB转灰度图 # img_array = np.dot(img_array[:,:,:3], [0.299, 0.587, 0.114]) print(img_array.shape) img_array = np.where(img_array>100,1,0) # plt.imshow(img_array) # 显示图片 plt.imshow(img_array,cmap='Greys_r') # 灰度模式(基于灰度array) plt.axis('off') # 不显示坐标轴 plt.savefig('psb_savefig.jpg') # 保存整个显示框 plt.show() plt.imsave(r'C:\Users\Mint\Desktop\psb_plt.jpg',img_array) mpimg.imsave(r'C:\Users\Mint\Desktop\psb_mpimg.jpg',img_array) # 等价于上面方法,保存图像完全一致