最近在做图片相关的工作,面对各种格式的图片转换,在OpenCV跟Pillow之间来回切换。觉得有必要把这些东西记录下来,以备不时之需。
首先介绍一下图片的常见三种存储格式。
不同的场景,经常会使用不同存储格式的图片。
在给人们展示时,一般是采用文件的方式进行存储,常见的有jpg,png,jpeg等等文件格式,便于人们区分理解。
在计算机网络中传输时,一般是采用字节流的方式进行存储,常见的有base64编码的图片字节流,便于计算机网络传输。
在计算机对图片进行处理时,一般是采用矩阵的方式进行存储,通常是3维矩阵(channels, height, weight), 矩阵上的每个元素表示图片在该位置的像素值,介于[0,255]
本文的重点是讲解如何通过python实现以上三种图片格式的转换。
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库,由Intel发起参与的一个开源项目。支持python, C, C++等多种编程语言。
Pillow是Python 图像处理库。详细介绍参见
本小节介绍分别使用opencv和pillow实现文件格式跟base64字节流的转换。
3.1.1 文件转base64
先读入图片,然后使用base64进行编码,代码如下
# file to base64 def file2base64(image_path): f = open(image_path, 'rb') base64_encode = base64.b64encode(f.read()).decode('utf-8') return base64_encode
输入图片如下图所示:
输出base64编码内容为:
b'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'
3.1.2 bas64转文件
OpenCV
# base64 to file with opencv def base642file_cv(base64_encode): base64_decode = base64.b64decode(base64_encode) img_array = np.fromstring(base64_decode, np.uint8) img = cv2.imdecode(img_array, cv2.COLOR_BGR2RGB) cv2.imwrite('base64_cv.jpg', img)
Pillow
# base64 to file with pillow def base642file_pil(base64_encode): base64_decode = base64.b64decode(base64_encode) img = BytesIO(base64_decode) img = Image.open(img) img.save('base64_pil.jpg')
3.2.1 文件转矩阵
OpenCV
# file to matrix with opencv def file2matrix_cv(image_path): img = cv2.imread(image_path) return img
Pillow
# file to matrix with pillow def file2matrix_pil(image_path): img = Image.open(image_path) return np.asarray(img)[:, :, ::-1]
3.2.2 矩阵转文件
OpenCV
# matrix to file with opencv def matrix2file_cv(mat): #mat必须是file2matrix_cv生成的,否则会出现颜色错误 img = np.array(mat) cv2.imwrite('mat2file_cv.jpg', img)
Pillow
# matrix to file with pillow def matrix2file_pil(mat): # mat必须是file2matrix_pil生成的,否则会出现颜色错误 img = np.array(mat) img_pil = Image.fromarray(img) img_pil.save('mat2file_pil.jpg')
3.3.1 base64转矩阵
OpenCV
# base64 to numpy array with opencv def bas642mat_cv(base64_encode): base64_decode = base64.b64decode(base64_encode) img_array = np.fromstring(base64_decode, np.uint8) img = cv2.imdecode(img_array, cv2.COLOR_BGR2RGB) return img
Pillow
# base64 to numpy array with pillow def base642mat_pil(base64_encode): base64_decode = base64.b64decode(base64_encode) img_pil = Image.open(BytesIO(base64_decode)) return np.asarray(img_pil)
3.3.2 矩阵转base64
OpenCV
# numpy array to base64 with opencv def mat2base64_cv(mat): retval, img_buffer = cv2.imencode('.jpg', mat) b64encode = base64.b64encode(img_buffer).decode('utf-8') return b64encode
Pillow
# numpy array to base64 with pillow def mat2base64_pil(mat): img = np.array(mat) img_pil = Image.fromarray(img) buff = BytesIO() img_pil.save(buff, format="JPEG") return base64.b64encode(buff.getvalue()).decode("utf-8")
补充:python tif格式的图片转换成其他格式
为了解决python 将tif格式图片用cv2等其他包转成其他格式,会出现图片变成灰色或者其他颜色的问题。
用第三方库tifffile就可以完全解决这个问题,代码如下:
import tifffile as tif im1 = tif.imread("1.tif") tif.imsave("1.png", im1)
如果未安装tifffile
pip install tifffile
以上的代码转成之后,图片不会丢失信息,可以原图转换,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。