У меня есть изображение с несколькими зелеными полосами.Но один из них особенный, потому что он связан с синей формой.Я хочу нарисовать ограничивающий прямоугольник, используя minAreaRect () вокруг специальной зеленой полосы.
Мне удалось нарисовать ограничивающие рамки, используя minAreaRect (), вокруг всех зеленых полос до сих пор.Но для того, чтобы отфильтровать зеленые полосы и взять только специальные, мне нужно определить, в каком блоке находятся синие пиксели.
Чтобы сделать это, я хочу проверить каждый пиксель внутри каждого блока, чтобы проверить, какой из них содержит синие пиксели.Есть ли способ идентифицировать пиксельные координаты пикселей внутри ограничительной рамки.Или есть лучший подход?
import cv2 as cv
import numpy as np
# Load the aerial image and convert to HSV colourspace
image = cv.imread("1.png")
image1 = image
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
# Define lower and uppper limits of the color blue
low_blue = np.array([94, 80, 2])
high_blue = np.array([126, 255, 255])
# Mask image to only select blues
mask1 = cv.inRange(hsv, low_blue, high_blue)
# Change image to green where we found blue
image[mask1 > 0] = (0, 130, 0)
blurred_frame = cv.GaussianBlur(image, (5, 5), 0)
hsv = cv.cvtColor(blurred_frame, cv.COLOR_BGR2HSV)
low_green = np.array([25, 52, 72])
high_green = np.array([102, 255, 255])
mask = cv.inRange(hsv, low_green, high_green)
_, contours, _ = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)
image[mask1 > 0] = (255, 0, 0)
for contour in contours:
rect = cv.minAreaRect(contour)
box = cv.boxPoints(rect)
box = np.int0(box)
Cx = rect[0][0]
Cy = rect[0][1]
cv.drawContours(image, [box], 0, (0, 0, 255), 2)
cv.imshow("Frame", image)
cv.waitKey(0)
cv.destroyAllWindows()
Вот входное изображение
https://ibb.co/h9cv4DN
Вот ожидаемый результат (ограничивающий прямоугольник обозначен фиолетовым цветом)
https://ibb.co/8Mq6Mwt