有一种使用肤色检测手的简单方法。也许这会有所帮助......你可以在这个 youtube视频上看到结果。警告:背景不应该包含皮肤颜色的东西,比如木头。
这是代码:
''' Detect human skin tone and draw a boundary around it.
Useful for gesture recognition and motion tracking.
Inspired by: http://stackoverflow.com/a/14756351/1463143
Date: 08 June 2013
'''
# Required moduls
import cv2
import numpy
# Constants for finding range of skin color in YCrCb
min_YCrCb = numpy.array([0,133,77],numpy.uint8)
max_YCrCb = numpy.array([255,173,127],numpy.uint8)
# Create a window to display the camera feed
cv2.namedWindow('Camera Output')
# Get pointer to video frames from primary device
videoFrame = cv2.VideoCapture(0)
# Process the video frames
keyPressed = -1 # -1 indicates no key pressed
while(keyPressed < 0): # any key pressed has a value >= 0
# Grab video frame, decode it and return next video frame
readSucsess, sourceImage = videoFrame.read()
# Convert image to YCrCb
imageYCrCb = cv2.cvtColor(sourceImage,cv2.COLOR_BGR2YCR_CB)
# Find region with skin tone in YCrCb image
skinRegion = cv2.inRange(imageYCrCb,min_YCrCb,max_YCrCb)
# Do contour detection on skin region
contours, hierarchy = cv2.findContours(skinRegion, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Draw the contour on the source image
for i, c in enumerate(contours):
area = cv2.contourArea(c)
if area > 1000:
cv2.drawContours(sourceImage, contours, i, (0, 255, 0), 3)
# Display the source image
cv2.imshow('Camera Output',sourceImage)
# Check for user input to close program
keyPressed = cv2.waitKey(1) # wait 1 milisecond in each iteration of while loop
# Close window and camera after exiting the while loop
cv2.destroyWindow('Camera Output')
videoFrame.release()
cv2.findContour 非常有用,您可以在找到轮廓后使用 cv2.moments 找到“blob”的质心。查看有关形状描述符的 opencv 文档。
我还没有弄清楚如何制作位于轮廓中间的骨架,但我正在考虑“侵蚀”轮廓直到它变成一条线。在图像处理中,该过程称为“骨架化”或“形态骨架”。这是有关骨架化的一些基本信息。
这是一个在opencv和c++中实现骨架化的链接
这是opencv和python中骨架化的链接
希望有帮助:)
- - 编辑 - -
我强烈建议您阅读 Deva Ramanan 的这些论文(访问链接页面后向下滚动): http: //www.ics.uci.edu/~dramanan/
- C.德赛,D.拉马南。“使用关系短语检测动作、姿势和对象”欧洲计算机视觉会议 (ECCV),意大利佛罗伦萨,2012 年 10 月。
- D. 公园,D. 拉马南。“零件模型的 N 最佳最大解码器”国际计算机视觉会议 (ICCV),西班牙巴塞罗那,2011 年 11 月。
- D.拉马南。“学习解析关节物体的图像”神经信息。过程。系统 (NIPS),加拿大温哥华,2006 年 12 月。