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))

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值