How to convert image file object to numpy array in with openCv python?

Issue

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

Solution

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))

Answered By – Mark Setchell

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published