Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python OpenCV load image from byte string

I'm trying to load image from string like as PHP function imagecreatefromstring

How can I do that?

I have MySQL blob field image. I'm using MySQLdb and don't want create temporary file for working with images in PyOpenCV.

NOTE: need cv (not cv2) wrapper function

like image 920
featureoffuture Avatar asked Jun 18 '13 13:06

featureoffuture


1 Answers

This is what I normally use to convert images stored in database to OpenCV images in Python.

import numpy as np import cv2 from cv2 import cv  # Load image as string from file/database fd = open('foo.jpg') img_str = fd.read() fd.close()  # CV2 nparr = np.fromstring(img_str, np.uint8) img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) # cv2.IMREAD_COLOR in OpenCV 3.1  # CV img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3) cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])  # check types print type(img_str) print type(img_np) print type(img_ipl) 

I have added the conversion from numpy.ndarray to cv2.cv.iplimage, so the script above will print:

<type 'str'> <type 'numpy.ndarray'> <type 'cv2.cv.iplimage'> 

EDIT: As of latest numpy 1.18.5 +, the np.fromstring raise a warning, hence np.frombuffer shall be used in that place.

like image 73
jabaldonedo Avatar answered Sep 21 '22 14:09

jabaldonedo