Попытка изменить размер и форму изображения, используя CV2 и numpy - PullRequest
2 голосов
/ 19 апреля 2020

У меня есть изображение, которое я хочу сделать правильной формой, подходящей для моей модели keras.

Я хотел использовать imread, imresize, imshow from scipy, но похоже, что они устарели.

Старый код с функциональностью, которую я пытаюсь эмулировать:

x = imread('output.png',mode='L')
x = np.invert(x)
x = imresize(x,(28,28))
imshow(x)
x = x.reshape(1,28,28,1)

Мой новый код выглядит следующим образом:

import numpy as np
from PIL import Image
import cv2

def load_image( infilename ) :
    img = Image.open( infilename )
    img.load()
    data = np.asarray( img, dtype="int32" )
    return data

x = load_image("output.png")

x = cv2.resize(x, dsize=(28, 28))
x = x.reshape(1,28,28,1)

В настоящее время я пытаюсь использовать cv2 и numpy для обработки изображения, когда я получаю следующую ошибку:

x = cv2.resize(x, dsize=(28, 28))
cv2.error: OpenCV(3.4.2) C:\Miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\imgproc\src\resize.cpp:3922: error: (-215:Assertion failed) func != 0 in function 'cv::hal::resize'

1 Ответ

1 голос
/ 19 апреля 2020

здесь - похожий вопрос. Похоже, метод изменения размера opencv не работает с типом int32. Вы можете попытаться вызвать его после изменения размера.

Наконец cv2.imread(infilename,-1) возвращает массив numpy:

import numpy as np
import cv2

def load_image( infilename ) :
    data = cv2.imread(infilename,-1)
    return data

x = load_image("output.png")

x = cv2.resize(x, dsize=(28, 28))
x = x.astype('int32')
x = x.reshape(1,28,28,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...