Python对图像的基础处理(opencv、PIL和numpy)

Python对图像的相关处理

1. OPENCV的图像处理常规内容

使用时导入包:import cv2

1.1 OpenCV读取图像

img = cv2.imread("test.jpg")

1.2 OpenCV转为PIL格式图像

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

1.3 二进制数据流转为OpenCV格式数据

image = file_data.read()
cv_img = cv2.imdecode(np.frombuffer(image, np.uint8), cv2.IMREAD_COLOR)

注:在这里的file_data是二进制的数据流,读取方式可以是file_data=open("test.jpg", "rb"),这种二进制数据流可以通过上述的代码直接转换成OpenCV的数据格式。

1.4 OpenCV图像转为二进制数据流

byte_data = np.array(cv2.imencode('.png', cv_img )[1]).tobytes()

1.5 保存OpenCV图像

cv2.imwrite("new_cv.jpg", cv_img) 

1.6 OpenCV查看图像大小

size = cv_img.shape

图像矩阵的shape属性表示图像的大小,shape会返回tuple元组,第一个元素(size [0])表示矩阵行数,第二个元组(size [1])表示矩阵列数,第三个元素(size [2])是3,表示像素值由三原色RGB组成。


2. PIL的图像处理常规内容

使用时导入包:from PIL import Image

2.1 PIL读取图像

image = Image.open("test.jpg")

2.2 PIL转为OpenCV格式图像

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

2.3 二进制数据流转为PIL格式数据

image = file_data.read()
byte_stream = io.BytesIO(image)  
PIL_Img = Image.open(byte_stream)

注:在这里的file_data与上述介绍的OpenCV中处理的二进制数据流一致,不再赘述。

2.4 OpenCV图像转为二进制数据流

from io import BytesIO

img_byte = BytesIO()
PIL_Img.save(img_byte, format='JPEG') # format只有PNG or JPEG两种
byte_data = img_byte.getvalue()  # PIL_Img对象转为二进制流

2.5 保存PIL图像

PIL_Img.save("new_pil.jpg") 

2.6 PIL查看图像大小

size = PIL_Img.size

图片尺寸(以像素为单位).
类型: (width, height),图片像素宽和图片像素高。


3. numpy的相关内容

使用时导入包:import numpy as np

3.1 OpenCV与numpy

import cv2
img = cv2.imread("test.jpg")
print(type(img))

通过打印的结果可以看到,OpenCV读取的图像数据类型为numpy.ndarray

3.2 numpy数据转为OpenCV格式图像

# 图片的分辨率为200*300,这里b, g, r设为随机值,注意dtype属性
blue = np.random.randint(0, 255, (100, 100), dtype=np.uint8)
green = np.random.randint(0, 255, (100, 100), dtype=np.uint8)
red = np.random.randint(0, 255, (100, 100), dtype=np.uint8)
# 合并三通道,形成图片格式
img = cv2.merge([blue, green, red])

注:OpenCV读取图片的顺序为B、G、R,因此融合numpy数据成OpenCV格式图像时要注意顺序。

3.3 PIL与numpy转换

image = Image.open("test.jpg")
np_image = np.array(image) # PIL图像转为numpy
img = Image.fromarray(img.astype('uint8')).convert('RGB')

注:PIL读取图片的顺序为R、G、B,与OpenCV的顺序不相同。

在工作中常用的相关图像处理的基础内容,做个小笔记!!!
好记性不如烂笔头。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值