cv2 imencode方法使用

之前一直很疑惑cv2的图像编码方法是如何使用的,做个总结。

_, enc = cv2.imencode('.jpg', img)

这个方法需要特别注意,img一定是一个BGR格式的uint8 ndarray。

demo code:

from PIL import Image
import numpy as np
import cv2
import base64
from io import BytesIO
image = Image.open('./mis_images/开蓬/aa0b87ffd1623ed68417f80a2f84291d.jpg')
image = np.asarray(image)
def ndarray2b64(img, format='rgb'):
    if format == 'rgb':
        _, enc = cv2.imencode('.jpg', img[..., ::-1])
    elif format == 'bgr':
        _, enc = cv2.imencode('.jpg', img)
    b64 = base64.urlsafe_b64encode(enc.tobytes())
    return b64
image_b64 = str(ndarray2b64(image), encoding='utf-8')
c_img = Image.open(BytesIO(base64.b64decode(image_b64)))
c_img.save('./out1.jpg')

最终得到的out1.jpg才是正确的。

你可能感兴趣的:(图像)