我目前正在尝试从图像中勾勒出人体轮廓,但是我现在被困住了。
我参加了关于轮廓的不同视频讲座,但它们与诸如矩形,圆形和其他类似形状的对象有关。
有人可以引导我了解人体轮廓吗? This picture显示了我正在寻找的轮廓示例。
答案 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)
结果:
这是OpenCV文档中与此主题有关的另一个有用链接:Background Subtraction。希望对您有所帮助,并为您提供有关操作方法的想法。干杯!