有時候使用cv2需要安裝opencv,但是opencv安裝比較麻煩,因為需要編譯過程。
所以,我們可以使用PIL對cv2的一些常用接口進行復現。
這里我們實現了cv2的imread(), imwrite(), resize(), cvtColor() 共四個接口。
實現代碼如下:
import PIL from PIL import Image import numpy as np def imread(filename): img = np.array(Image.open(filename)) if len(np.shape(img)) == 3: return img[:,:,::-1] else: return img def imwrite(filename, img): if len(np.shape(img)) == 3: img = Image.fromarray(img[:,:,::-1]) else: img = Image.fromarray(img) img.save(filename) def resize(img,size, interpolation = PIL.Image.LANCZOS): # PIL.Image.NEAREST, PIL.Image.BILINEAR , PIL.Image.BICUBIC, PIL.Image.LANCZOS if len(np.shape(img)) == 3: return np.array(Image.fromarray(img[:,:,::-1]).resize(size,resample = interpolation))[:,:,::-1] else: assert len(np.shape(img)) == 2 return np.array(Image.fromarray(img).resize(size,resample = interpolation)) def cvtColor(img, mode): # mode: 'COLOR_BGR2GRAY', 'COLOR_GRAY2BGR' if mode == 'COLOR_BGR2GRAY': assert len(np.shape(img)) == 3 img = Image.fromarray(img[:,:,::-1]) return np.array(img.convert(mode = 'L')) if mode == 'COLOR_GRAY2BGR': assert len(np.shape(img)) == 2 return np.repeat(img[:, :, np.newaxis], 3, axis=2) return None