kkate4ka
@kkate4ka
глупенькая девочка

Как переписать функцию cv2.resize()?

Задание: Уменьшить размер изображения в 2 раза
Есть функция: resized = cv2.resize(img, dim, interpolation=cv2.INTER_CUBIC)
которая использует бикубическую интерполяцию.
Попросили переписать задание "ручками".
То есть, необходимо проредить изображение, путем вычисления значения прореженного изображения как среднее арифметическое четырех смежных элементов исходного изображения.
Функция библиотеки cv2 работает так же, но как переписать ее самостоятельно я не представляю..
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
img = np.float32(img)
img = img[0::2, :] + img[1::2, :]
img = img[:, 0::2] + img[:, 1::2]
img = np.uint8(img / 4)

img = np.uint8(
    (np.float32(img[0::2, 0::2]) + img[0::2, 1::2] + img[1::2, 0::2] + img[1::2, 1::2]) / 4
)

kernel = np.ones((2, 2), dtype=np.float32) / 4
img = cv2.filter2D(img, cv2.CV_8U, kernel, anchor=(0, 0))[::2, ::2]

img = np.lib.stride_tricks.as_strided(
    img, (*np.array(img.shape[:2]) // 2, 4, 3), (*np.array(img.strides[:2]) * 2, *img.strides[1:])
).mean(axis=-2).astype(np.uint8)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы