Как сохранять сжатую картинку в буфер с помощью функции OpenCV imencode() уже узнали. А как же сделать обратную операцию?
Разумеется, с помощью функции cv::imdecode() .
С++:
Mat cv::imdecode ( InputArray buf, int flags )
Python:
cv.imdecode( buf, flags ) -> retval
Считывает изображение из буфера в памяти.
Функция imdecode считывает изображение из указанного буфера в памяти. Если буфер слишком короткий или содержит недопустимые данные, функция возвращает пустую матрицу.
Поддерживаемые форматы и флаги такие же, как и у функции cv::imread().
Параметры
buf — входной массив или вектор байтов.
flags — те же флаги, что и в cv::imread, cv::ImreadModes.
Примечание
В случае цветных изображений, декодированные изображения будут иметь каналы, сохраненные в порядке B G R.
Рассмотрим как можно использовать эту функцию для считывания изображения предварительно закодированного с помощью base64 (чтобы считать картинку из json-файла labelme).
def get_image_from_base64(img_base64_data): # return image array from base64 data data = np.frombuffer(base64.b64decode(img_base64_data), np.uint8) decimg = cv2.imdecode(data, cv2.IMREAD_COLOR) return decimg
Вот и всё. Теперь мы умеем сжимать и разжимать картинки на лету.
Ссылки
По теме