У меня есть какое-то изображение скотоводческой фермы.Каждое изображение предполагает охват только двух загонов (небольшая комната для крупного рогатого скота).Тем не менее, камера также покрывает соседние ручки.Мне нужно избавиться от областей соседних ручек.
Входное изображение -
Выходное изображение -
Я попробовал следующую команду, и она выполняет свою работу.Тем не менее, он уменьшает размер изображения и выводит размер ограничивающего прямоугольника, сгенерированного в строке 2. Вывод становится меньше исходного изображения.В этом случае исходное изображение имеет размер 2560x1440, но его выход составляет 2536x1406.
import cv2
import numpy as np
import matplotlib.pyplot as plt
frame = cv2.imread("input.jpg")
# pts - location of the 4 corners of the roi
pts = np.array([[6, 1425],[953, 20 ],[1934, 40 ], [2541,1340]])
rect = cv2.boundingRect(pts)
x, y, w, h = rect
croped = frame[y:y + h, x:x + w].copy()
pts = pts - pts.min(axis=0)
mask = np.zeros(croped.shape[:2], np.uint8)
cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA)
frame_roi = cv2.bitwise_and(croped, croped, mask=mask)
cv2.imwrite("output.jpg", frame_roi)
Однако мне нужно, чтобы выходное изображение было того же размера, что и входное изображение, а все элементы из области интереса должны быть черными /белый (как показано ниже, это другая картина).Будет работать как белая, так и черная замаскированная область (на вышеприведенном выводе изображение черного цвета, а на отредактированном изображении ниже - белый).Есть ли способ сделать это с помощью opencv или любой другой библиотеки?