#python #opencv #image-processing #bounding-box
#python #opencv #обработка изображений #bounding-box
Вопрос:
У меня есть набор изображений с их значениями ограничивающей рамки, как показано ниже:
image_names class xmin xmax ymin ymax
image1.png 1 260 361 45 184
Я хочу преобразовать эти значения ограничивающей рамки в маску, имеющую размеры ограничивающей рамки и заполненную белыми пикселями, и сохранить маски для каждого изображения в формате «image1_mask.png» и так далее. Есть ли у нас предопределенные функции для этого?
Комментарии:
1. Просто нарисуйте заполненный белым прямоугольник на черном фоновом изображении из двух диагонально противоположных углов (xmin, ymin) и (xmax, ymax). См . docs.opencv.org/4.1.1/d6/d6e /. … Черный фон см. в Numpy np.zeros() или np.zeros_like(). numpy.org/doc/stable/reference/generated/numpy.zeros_like.html
Ответ №1:
Сначала создайте пустое изображение того же размера, что и image1.png
:
import cv2
image = cv2.imread('image1.png', -1)
mask = image.copy()
mask[:] = 0
Затем используйте cv2.rectangle
, чтобы нарисовать белый прямоугольник в пределах интересующих границ. К счастью, он принимает минимальные и максимальные горизонтальные и вертикальные координаты, которые определяют верхнюю левую и нижнюю правую границы прямоугольника.
num_channels = 1 if len(mask.shape) == 2 else mask.shape[2]
cv2.rectangle(mask, (xmin, ymin), (xmax, ymax), color=(255,) * num_channels)
mask
будет содержать белый прямоугольник в интересующей области. Обратите внимание, что в cv2.rectangle
вызове я адаптировал это в зависимости от того, является ли входное изображение оттенками серого или цветным, поэтому вам не придется беспокоиться о преобразовании цвета в оттенки серого или наоборот.
Комментарии:
1.
cv2.rectangle(.., thickness=-1)
должно быть добавлено в случае, если прямоугольник должен быть заполнен
Ответ №2:
Простой подход
import cv2
import numpy as np
img = cv2.imread('image1.png') # read image
mask = np.zeros((img.shape[0],img.shape[1]),dtype=np.uint8) # initialize mask
mask[ymin:ymax,xmin:xmax] = 255 # fill with white pixels
cv2.imwrite('image1_mask.png',mask) # save mask