Давайте сделаем это просто.
У меня есть частный проект для блокирования или пикселирования изображения с помощью рамки в open-cv, что-то вроде цензуры изображения, вдохновленное этой статьей:
Я нашел способ классификации области цензора с помощью Keras, но до сих пор не знаю, как использовать границу для пикселирования классифицированной области и наложения ее на исходное изображение. Любая помощь приветствуется.
Это пример процесса, который я хочу сделать:
Всего 1 ответ
Простой метод состоит в том, чтобы извлечь ROI, используя Numpy Slicing, Pixelate, а затем вставить его обратно в исходное изображение. Я буду использовать технику пикселизации, описанную в том, как пикселировать изображение с помощью OpenCV в Python? , Вот простой пример:
Входное изображение и ROI, которые будут извлечены
Извлеченный ROI
Pixelated ROI
Результат
Код
import cv2
def pixelate(image):
# Get input size
width, height, _ = image.shape
# Desired "pixelated" size
w, h = (16, 16)
# Resize image to "pixelated" size
temp = cv2.resize(image, (h, w), interpolation=cv2.INTER_LINEAR)
# Initialize output image
return cv2.resize(temp, (height, width), interpolation=cv2.INTER_NEAREST)
# Load image
image = cv2.imread(Ƈ.png')
# ROI bounding box coordinates
x,y,w,h = 122,98,283,240
# Extract ROI
ROI = image[y:y+h, x:x+w]
# Pixelate ROI
pixelated_ROI = pixelate(ROI)
# Paste pixelated ROI back into original image
image[y:y+h, x:x+w] = pixelated_ROI
cv2.imshow('pixelated_ROI', pixelated_ROI)
cv2.imshow('image', image)
cv2.waitKey()
Примечание. Координаты ограничивающего прямоугольника ROI были найдены с помощью сценария получения координат ограничивающего прямоугольника ROI без Guess & Check . В вашем случае я предполагаю, что у вас уже есть координаты ограничивающего прямоугольника x,y,w,h
полученные с помощью cv2.boundingRect
.