Source code for hello.io.image
import re
import cv2 as cv
import numpy as np
import requests
URL_REGEX = re.compile(r"http://|https://|ftp://")
[docs]def encode_img(img, ext=".png"):
_, nparr = cv.imencode(ext, img)
return nparr
[docs]def decode_img(nparr):
# nparr = encode_img(bgr)
# np.abs(decode_img(nparr) - bgr).sum()
img = cv.imdecode(nparr, flags=cv.IMREAD_COLOR)
return img
[docs]def buffer_to_img(buf):
# buf = encode_img(bgr).tobytes()
# np.abs(buffer_to_img(buf) - bgr).sum()
nparr = np.frombuffer(buf, dtype=np.uint8)
img = cv.imdecode(nparr, flags=cv.IMREAD_COLOR)
return img
[docs]def imread(uri, flags=1):
# flags(0: grayscale, 1: color)
if isinstance(uri, str):
if URL_REGEX.match(uri):
buffer = requests.get(uri).content
nparr = np.frombuffer(buffer, np.uint8)
return cv.imdecode(nparr, flags)
return cv.imread(uri, flags)
if isinstance(uri, bytes):
nparr = np.frombuffer(uri, np.uint8)
return cv.imdecode(nparr, flags)
raise Exception(f"{type(uri)} not supported")
[docs]def convert_color_factory(src, dst):
code = getattr(cv, f"COLOR_{src.upper()}2{dst.upper()}")
def convert_color(img):
out_img = cv.cvtColor(img, code)
return out_img
return convert_color
bgr2rgb = convert_color_factory("bgr", "rgb")
rgb2bgr = convert_color_factory("rgb", "bgr")