我正在使用OpenCV和Python开发一个涉及身体追踪的项目,并且使用HSV值来找到肤色,然后在其周围绘制一个框。
尽管我可以找到所跟踪的对象并在其周围绘制一个框,但矩形总是垂直的。我想知道是否有任何方式可以使矩形旋转以更好地显示检测到的对象,类似于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()
输入图片:
输出图片(绿色框为输出框,黄色框为期望框):