Display opencv image using python flask

I am doing some image processing using opencv and using python flask api. I would like to display an image in a browser.

import cv2
from flask import Flask, request, make_response
import base64
import numpy as np
import urllib

app = Flask(__name__)


@app.route('/endpoint', methods=['GET'])
def process():
    image_url = request.args.get('imageurl')
    requested_url = urllib.urlopen(image_url)
    image_array = np.asarray(bytearray(requested_url.read()), dtype=np.uint8)
    img = cv2.imdecode(image_array, -1)


    # Do some processing, get output_img

    retval, buffer = cv2.imencode('.png', output_img)
    png_as_text = base64.b64encode(buffer)
    response = make_response(png_as_text)
    response.headers['Content-Type'] = 'image/png'
    return response

if __name__ == '__main__':
    app.run(debug=True)

However, I get a blank, invalid image as output. What am I doing wrong?

+4
source share
1 answer

As mentioned in the comments, you need to return the bytes of the image, not the base64 string.

Try the following:

retval, buffer = cv2.imencode('.png', output_img)
response = make_response(buffer.tobytes())
+3
source

Source: https://habr.com/ru/post/1672253/


All Articles