如何使用PpenCv在图像中塑造人体轮廓?

时间:2018-08-06 10:42:12

标签: python opencv computer-vision

我目前正在尝试从图像中勾勒出人体轮廓,但是我现在被困住了。

我参加了关于轮廓的不同视频讲座,但它们与诸如矩形,圆形和其他类似形状的对象有关。

有人可以引导我了解人体轮廓吗? This picture显示了我正在寻找的轮廓示例。

1 个答案:

答案 0 :(得分:1)

您必须了解,检测人体并不是那么简单,因为很难区分人体的背景。话虽如此,如果您有简单的背景(例如上载的图像),则可以尝试应用一定数量的图像转换(例如,应用二进制阈值,otsu ...请参阅opencv文档-OpenCV documentation)以提高ROI”突出显示”,因此您可以使用cv2.findContours()进行检测-与绘制圆形,正方形等的轮廓相同。甚至可以应用cv2.Canny()(Canny边缘检测)来检测图像中的各种边缘,然后搜索轮廓。这是您的图片示例(如果图片周围还没有红色轮廓,则效果会更好)。步骤在代码的注释中描述。请注意,这是非常基本的内容,在大多数情况下将不起作用,因为人工检测非常困难且存在广泛的问题。

示例:

import cv2

# Read image and convert it to grayscale. 
img = cv2.imread('human.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Search for edges in the image with cv2.Canny().
edges = cv2.Canny(img,150,200)

# Search for contours in the edged image with cv2.findContour().
_, contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

# Filter out contours that are not in your interest by applying size criterion.
for cnt in contours:
    size = cv2.contourArea(cnt)
    if size > 100:
        cv2.drawContours(img, [cnt], -1, (255,0,0), 3)

# Display the image.
cv2.imshow('img', img)

结果:

enter image description here

这是OpenCV文档中与此主题有关的另一个有用链接:Background Subtraction。希望对您有所帮助,并为您提供有关操作方法的想法。干杯!