PIL,OPENCV之间的转换关系

 

目录

PIL进行图片的读取:使用Image.open()

PIL读取的图片和numpy的相互转换

OPRENCV读取的图片

PIL读取的图片和OPRENCV读取的图片的相互转换


      PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。

      OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上

PIL进行图片的读取:使用Image.open()

         如果直接用PIL进行图片的读取的话, 读出来的像素值在0-255之间,获取像素的函数是getpiex(),像素顺序是RGB

from PIL import  Image
import numpy as np

if __name__ == '__main__':
    src_path='img/street.jpg'
    img = Image.open(src_path)
    print(img.mode)
    print(img.getpixel((11,121)))    # 返回的是坐标点(11,121)处的red,green,blue的数值
    print(img.size)
    img_array=np.asarray(img)
    print(img_array.shape)

 输出结果:

RGB
(78, 80, 79)
(1330, 1330)
(1330, 1330, 3)

PIL读取的图片的格式为RGB,RGBA,P,L,如果需要转换,使用convert函数即可

convert('RGB')
convert('L')
convert('RGBA')
convert('P')

PIL读取的图片和numpy的相互转换

 PIL转为numpy形式:

img_array=np.asarray(img)

PIL图像在转换为numpy.ndarray后,格式为(h,w,c),像素顺序为RGB; 

将变成array的图片矩阵变回Image对象,使用Image中的fromarray方法

pil_img=Image.fromarray(np.uint8(img))

OPRENCV读取的图片

 OpenCV在cv2.imread()后数据类型为numpy.ndarray,格式为(h,w,c),像素顺序为BGR

import cv2
img_cv2_color = cv2.imread('street.jpg')  # cv2读入的图像默认是uint8格式的numpy.darray, BGR通道
img_cv2_gray = cv2.imread('street.jpg', 0)  # img_cv2_gray.shape (1330,1330),0是指按灰度图片读取

 对于含有中文路径的图片读取

img = cv2.imdecode(np.fromfile(resize_jpg_path, dtype=np.uint8), flags=-1)
# resize_jpg_path图片路径

PIL读取的图片和OPRENCV读取的图片的相互转换

 PIL读取的图片转换为cv格式下的图片,即通道有RGB变为BGR

img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)

cv格式的图片转为PIL格式的:

img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

 

你可能感兴趣的:(opencv,pil,python,opencv,计算机视觉,深度学习)