Reputation: 1142
I am developing API to upload Image using Flask. After uploading i want to modify image using openCV, As openCV requires numpy array object to i have file object, how do i convert to numpy array? Here is my code
@app.route('/upload', methods=['POST'])
def enroll_user():
file = request.files['fileName']
# file.save(os.path.join(file.filename))
return response
Edit: updated code
@app.route('/upload', methods=['POST'])
def enroll_user():
file = request.files['fileName']
response = file.read()
# file.save(os.path.join(file.filename))
return response
I want to convert file to cv2 frame as i get with below code
ret, frame = cv2.imread(file)
One way is to write image to disk and read again with cv2.imread but i don't want to do that because it will be time consuming. So is there any way to convert to cv2 frame from file object?
Thanks
Upvotes: 11
Views: 6586
Reputation: 876
If the file
is in read-byte mode (which means mode='rb'
) in your case, then numpy.frombuffer()
also works, for example :
file = request.files['fileName']
frame = cv2.imdecode(np.frombuffer(file.read(), numpy.uint8), cv2.IMREAD_COLOR)
Upvotes: 0
Reputation: 208003
If you effectively have the contents of a JPEG/PNG file in your variable called response
, I think you can do:
frame = cv2.imdecode(response)
Or, you may need to do:
frame = cv2.imdecode(np.fromstring(response, np.uint8), cv2.IMREAD_COLOR)
Failing that, another way is like this:
from io import BytesIO
from scipy import misc
frame = misc.imread(BytesIO(response))
Upvotes: 4