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

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

Задание: Уменьшить размер изображения в 2 раза
Есть функция: resized = cv2.resize(img, dim, interpolation=cv2.INTER_CUBIC)
которая использует бикубическую интерполяцию.
Попросили переписать задание "ручками".
То есть, необходимо проредить изображение, путем вычисления значения прореженного изображения как среднее арифметическое четырех смежных элементов исходного изображения.
Функция библиотеки cv2 работает так же, но как переписать ее самостоятельно я не представляю..
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы