Reading image file (file storage object) using CV2 Reading image file (file storage object) using CV2 curl curl

Reading image file (file storage object) using CV2


I had similar issues while using opencv with flask server, for that first i saved the image to disk and read that image using saved filepath again using cv2.imread()

Here is a sample code:

data =request.files['file']filename = secure_filename(file.filename) # save file filepath = os.path.join(app.config['imgdir'], filename);file.save(filepath)cv2.imread(filepath)

But now i have got even more efficient approach from here by using cv2.imdecode() to read image from numpy array as below:

#read image file string datafilestr = request.files['file'].read()#convert string data to numpy arraynpimg = numpy.fromstring(filestr, numpy.uint8)# convert numpy array to imageimg = cv2.imdecode(npimg, cv2.CV_LOAD_IMAGE_UNCHANGED)


After a bit of experimentation, I myself figured out a way to read the file using CV2.For this I first read the image using PIL.image method

This is my code,

@app.route('/home', methods=['POST'])def home():    data =request.files['file']    img = Image.open(request.files['file'])    img = np.array(img)    img = cv2.resize(img,(224,224))    img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)    fact_resp= model.predict(img)    return jsonify(fact_resp)

I wonder if there is any straight forward way to do this without using PIL.


So incase you want to do something like ,

file = request.files['file']img = cv2.imread(file) 

then do it like this

import numpy as npfile = request.files['file']npimg = np.fromfile(file, np.uint8)file = cv2.imdecode(npimg, cv2.IMREAD_COLOR)

Now you don't need to do cv2.imread() again, but can use this in the next line of codes.

This applies for opencv>3