Я хотел бы обрезать изображение с выделенной оранжевым цветом областью, нарисованной от руки, как показано ниже,
В результате должно получиться обрезанное изображение вдоль главной оси пятна или контура с прямоугольной ограничивающей рамкой, как показано ниже.
Вот что я пробовал,
import numpy as np
import cv2
# load the image
image = cv2.imread("frame50.jpg", 1)
#color boundaries [B, G, R]
lower = [0, 3, 30]
upper = [30, 117, 253]
# create NumPy arrays from the boundaries
lower = np.array(lower, dtype="uint8")
upper = np.array(upper, dtype="uint8")
# find the colors within the specified boundaries and apply
# the mask
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask=mask)
ret,thresh = cv2.threshold(mask, 50, 255, 0)
if (int(cv2.__version__[0]) > 3):
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
else:
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if len(contours) != 0:
# find the biggest countour (c) by the area
c = max(contours, key = cv2.contourArea)
x,y,w,h = cv2.boundingRect(c)
ROI = image[y:y+h, x:x+w]
cv2.imshow('ROI',ROI)
cv2.imwrite('ROI.png',ROI)
cv2.waitKey(0)
В большинстве случаев это не работает. Для некоторых изображений происходит следующее:
Я хотел бы знать, есть ли лучший способ сделать это или как я могу исправить то, что у меня есть прямо сейчас. Обратите внимание, что выделенная область нарисована от руки и может иметь любую форму, но она закрыта, а не оставлена открытой, а цвет изюминкой является сам оттенок оранжевого во всех случаях. И есть ли способ сохранить содержимое только внутри круга и затемнить все за его пределами?
EDIT1: я смог исправить неправильное отсечение, увеличив пороговое значение. Но мой главный вопрос сейчас таков: есть ли способ сохранить контент только внутри круга и затемнить все за его пределами? Я вижу маску, как показано ниже,
Как мне заполнить эту маску и сохранить содержимое внутри круга и затемнить все за его пределами с той же прямоугольной ограничивающей рамкой?