如何用PIL库实现类似OpenCV的cv2功能?

2026-05-21 17:562阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计328个文字,预计阅读时间需要2分钟。

如何用PIL库实现类似OpenCV的cv2功能?

有时使用cv2需要安装OpenCV,但安装过程比较繁琐,因为需要编译。因此,我们可以使用PIL来复现cv2的一些常用接口。以下是我们实现的cv2的imread、imwrite、resize和cvtColor接口:

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

如何用PIL库实现类似OpenCV的cv2功能?

黄世宇/Shiyu Huang's Personal Page:​​huangshiyu13.github.io/​​



本文共计328个文字,预计阅读时间需要2分钟。

如何用PIL库实现类似OpenCV的cv2功能?

有时使用cv2需要安装OpenCV,但安装过程比较繁琐,因为需要编译。因此,我们可以使用PIL来复现cv2的一些常用接口。以下是我们实现的cv2的imread、imwrite、resize和cvtColor接口:

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

如何用PIL库实现类似OpenCV的cv2功能?

黄世宇/Shiyu Huang's Personal Page:​​huangshiyu13.github.io/​​