Я использую OpenCV и python для работы над проектом, который включает в себя отслеживание тела, и я использую значения HSV, чтобы найти оттенок кожи, затем нарисуйте вокруг него коробку.Рисование угловых прямоугольников в OpenCV
Однако, хотя я могу найти отслеживаемый объект и нарисовать прямоугольник вокруг него, прямоугольники всегда вертикальны, и я хотел бы знать, есть ли какой-либо угол углов, чтобы они лучше отображали обнаруженный объект, несколько похожий на функцию minEnclosingCircle , но с использованием прямоугольника
Изображения, вероятно, объясняют, что я ищу лучше. Ящики, которые я получаю, зеленые, и то, что я ищу, я нарисовал желтым цветом. Как вы можете видеть, маска показывает, и прямоугольник с прямоугольником также будет лучше охватывать выбранную область. Я также включил исходный образ.
Мой код:
import numpy as np
import cv2
# Input image
image = cv2.imread('TestIn.png')
# Converts to grey for better reulsts
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Converts to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# HSV values
lower_skin = np.array([5,36,53])
upper_skin = np.array([19,120,125])
mask = cv2.inRange(hsv, lower_skin, upper_skin)
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
# Finds contours
im2, cnts, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Draws contours
for c in cnts:
if cv2.contourArea(c) < 3000:
continue
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(image, (x,y), (x+w,y+h), (0, 255, 0), 2)
cv2.imshow('mask', mask)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Входное изображение:
выходного изображения (выходные коробки в зеленые, необходимые окошки в желтый цвет):
функция minAreaRect вычисляет то, что вы хотите , но вы должны рисовать линии вручную, нет функции рисования для объектов RotatedRect. – Micka
См. раздел 7 в этом [официальном учебнике OpenCV] (http://docs.opencv.org/3.1.0/dd/d49/tutorial_py_contour_features.html # gsc.tab = 0) из документации. –