Работа с картинками в numpy
Меняем контраст и яркость
Смена контраста
def change_contrast_numpy(img: np.ndarray, factor: float) -> np.ndarray:
# Применяем фактор к каждому пикселю
adjusted_image = 128 + factor * (img - 128)
# Обрезаем диапазон цвета от 0 до 255
clipped_image = np.clip(adjusted_image, 0, 255)
# Конвертируем в целые числа
final_image = clipped_image.astype(np.uint8)
return final_image
Смена яркости
def change_brightness_numpy(img: np.ndarray, factor: float) -> np.ndarray:
# Умножаем каждый пиксель на фактор
adjusted_image = img.astype(np.float32) * factor
# Обрезаем диапазон цвета от 0 до 255
adjusted_image = np.clip(adjusted_image, 0, 255)
# Конвертируем в целые числа
adjusted_image = adjusted_image.astype(np.uint8)
return adjusted_image
Рекомендуемые библиотеки для работы с изображениями
imageio
- библиотека, предоставляющая простой интерфейс для чтения и записи широкого спектра графических данных, включая анимированные изображения, объемные данные и научные форматы.scipy
- библиотека для работы с массивами данных и математикой, но имеет модульndimage
, позволяющий работать с изображениями в виде матриц.numpy
- библиотека для работы с многомерными массивами, обычно используется в связке сimageio
для работы с изображениями.Pillow
- высокоуровневая библиотека для работы с изображениями.struct
- библиотека для работы с структурными типами данных, такими как словари, множества и многомерные массивы, можно использовать для чтения BMP в бинарном режиме.
Шаблон кода для работы с изображениями
С numpy
, imageio
и чтением аргументов с помощью sys.argv
:
import sys
from imageio.v2 import imread, imwrite
def work_with_image(im):
...
return ...
# Читаем аргументы
input_filename = sys.argv[1]
output_filename = sys.argv[2]
im = imread(input_filename)
im2 = work_with_image(im)
imwrite(output_filename, im2)
Вы можете поменять название функции work_with_image
, а также принимать дополнительные аргументы с помощью sys.argv
.
С argparse
:
import argparse
from imageio.v2 import imread, imwrite
def work_with_image(im):
...
return ...
parser = argparse.ArgumentParser()
parser.add_argument("input_filename", help="Файл для обработки программой")
parser.add_argument("output_filename", help="Файл для сохранения результата")
args = parser.parse_args()
# Читаем аргументы
input_filename = args.input_filename
output_filename = args.output_filename
im = imread(input_filename)
im2 = work_with_image(im)
imwrite(output_filename, im2)