Python OpenCV convert image to byte string?

binary, image, opencv, python

Solution

If you have an image `img` (which is a numpy array) you can convert it into string using:

>>> img_str = cv2.imencode('.jpg', img)[1].tostring()
>>> type(img_str)
 'str'

Now you can easily store the image inside your database, and then recover it by using:

>>> nparr = np.fromstring(STRING_FROM_DATABASE, np.uint8)
>>> img = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)

where you need to replace `STRING_FROM_DATABASE` with the variable that contains the result of your query to the database containing the image.

Problem

I'm working with PyOpenCV. How to convert cv2 image (numpy) to binary string for writing to MySQL db without a temporary file and `imwrite`? I googled it but found nothing... I'm trying `imencode`, but it doesn't work. ``` capture = cv2.VideoCapture(url.path) capture.set(cv2.cv.CV_CAP_PROP_POS_MSEC, float(url.query)) self.wfile.write(cv2.imencode('png', capture.read())) ``` Error: ``` File "server.py", line 16, in do_GET self.wfile.write(cv2.imencode('png', capture.read())) TypeError: img is not a numerical tuple ``` Help somebody!

Original source