Мы знаем, что OpenCV широко используется для работы с изображениями и имеет для этого широкий набор функций. Но что, если мы хотим обрабатывать файлы изображений без использования какой-либо внешней библиотеки, такой как OpenCV. Давайте посмотрим, как мы можем это сделать.
Масштабирование изображения (с использованием интерполяции ближайшего соседа):
Интерполяция ближайшего соседа — это самый простой способ интерполяции. Этот метод просто определяет «ближайший» соседний пиксель и принимает значение его интенсивности.
Рассмотрите небольшое изображение, ширина которого равна w, а высота — — h, которую мы хотим изменить с ширины p на ширину q, предполагая, что p > m и q > н. Теперь нам нужны две константы масштабирования:
scale_x = p / w scale_y = q / h
Теперь мы просто перебираем все пиксели в выходном изображении, ссылаясь на исходные пиксели, которые мы копируют из. масштабирование наших управляющих переменных с помощью scale_x и scale_y и округление полученных масштабированных значений индекса.
Визуальное представление:
Изображение 3Х3 пикселя (всего 9 пикселов), теперь если мы хотим увеличить размер изображения до 6Х6, то по алгоритму ближайшего соседа 6/3 (т.е. 2) пикселя должны иметь такое же значение RGB как и значение пикселя к исходному изображению.
<
Программа масштабирования изображения:
Вывод: Оттенки серого изображения:Использование среднего value, этот метод подчеркивает интенсивность пикселя, а не показывает, из каких значений RGB он состоит. Когда мы вычисляем среднее значение RGB и присваиваем ему значение RGB для пикселя, поскольку значение RGB пикселя одинаково, он не сможет создать какой-либо цвет, так как все цвета генерируются из-за различного соотношения RGB значений, так как в этом случае соотношение было бы 1:1:1. Поэтому визуализированное изображение будет выглядеть серым. Визуальное представление: ![]() Программа изображений в оттенках серого:
|
Вывод:
Обрезка изображения:
Обрезка в основном удаляет нежелательный пиксель. Это можно сделать, поместив нужный пиксель в другую сетку изображений, размер которой после обрезки совпадает с требуемым.
Рассмотрите изображение размером 10 √ó 10 пикселей, и если мы хотим обрезать только центр изображения размером 4 √ó 4 пикселя, затем нам нужно собрать значения пикселей ‚Äã‚Äãот (10-4)/2, начиная с (3, 3) до 4 пикселей в направлении x и 4 пикселя в направлении y.
Визуальное представление:
Обрезка изображения:
# использование matplotlib и numpy
import
matplotlib.image as img
import
numpy as npy
# прочитать изображение в переменной m
m
=
img.imread (
"taj.png"
)
# определение размера изображения ширина (w) высота (h)
w, h
=
m.shape [:
2
]
# требуемый размер изображения после обрезки
xNew
=
int
(w
*
1
/
4
)
yNew
=
int
(h
*
1
/
4
)
newImage
=
npy.zeros ([xNew, yNew,
4
])
# ширина печати высота исходного изображения
print
(w)
print
(h)
for
i
в
диапазон
(
1
, xNew):
for
j
in
range
(
1
, yNew):
# обрезать исходное изображение со 100 до 100 пикселей
newImage [i, j]
=
m [
100
+
i,
100
+
j]
# сохранить изображение
img.imsave (
`cropped.png`
, newImage)
Вывод: