Как преобразовать объект файла изображения в массив numpy в с помощью Python OpenCv? - PullRequest
3 голосов
/ 24 сентября 2019

Я разрабатываю API для загрузки изображений с помощью Flask.После загрузки я хочу изменить изображение с помощью openCV, так как openCV требует объект массива numpy, чтобы у меня был объект file, как мне преобразовать массив numpy?Вот мой код

@app.route('/upload', methods=['POST'])
def enroll_user():
    file = request.files['fileName']
    # file.save(os.path.join(file.filename))
    return response

Редактировать: обновленный код

@app.route('/upload', methods=['POST'])
    def enroll_user():
        file = request.files['fileName']
        response = file.read()
        # file.save(os.path.join(file.filename))
        return response

Я хочу преобразовать файл в кадр cv2, как я получаю с кодом ниже

ret, frame = cv2.imread(file)

Одним из способов является запись образа на диск и повторное чтение с помощью cv2.imread, но я не хочу этого делать, потому что это займет много времени.Так есть ли способ конвертировать в фрейм cv2 из файлового объекта?

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Если у вас фактически есть содержимое файла JPEG / PNG в переменной response, я думаю, что вы можете сделать:

frame = cv2.imdecode(response)

Или вам может потребоваться:

frame = cv2.imdecode(np.fromstring(response, np.uint8), cv2.IMREAD_COLOR)

Если это не так, другой путь выглядит так:

from io import BytesIO
from scipy import misc

frame = misc.imread(BytesIO(response))
0 голосов
/ 25 сентября 2019

Если вы используете последнюю версию OpenCV v4.1.X (или, я полагаю, начиная с OpenCV v2.2.X), cv2.imread() автоматически использует массивы Numpy.Изображение будет читаться как массив Numpy в формате BGR.Вы можете подтвердить это следующим образом:

import cv2

image = cv2.imread('1.jpg')
print(type(image))
print(image.shape)

Вывод

<class 'numpy.ndarray'>
(1348, 2132, 3)

В качестве дополнительного подтверждения мы можем проверить размер изображения с помощью атрибута shape (поскольку изображение являетсяNumpy массив).Мы видим, что это конкретное изображение имеет размер (1348, 2132, 3) в виде (height, width, channels)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...