Python之使用PIL实现cv2


有时候使用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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM