【问题标题】:OpenCV Splitting ContoursOpenCV 分割轮廓
【发布时间】:2017-05-15 02:28:27
【问题描述】:

我正在尝试在 Python 上使用 OpenCV 检测手部。
我正在处理这个阈值图像:


这就是轮廓绘制状态:


我正在尝试检测手,但轮廓太大,它会捕捉到我的整个身体。
我需要这样:



我的代码:

import cv2
orImage = cv2.imread("f.png")
image = cv2.cvtColor(orImage,cv2.COLOR_BGR2GRAY)
image = cv2.blur(image,(15,15))
(_,img_th) = cv2.threshold(image,96,255,1)
        (contours,_) = cv2.findContours(img_th, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
       if cv2.contourArea(c) > 15:
             x,y,w,h = cv2.boundingRect(c)
             cv2.rectangle(image,(x-20,y-20),(x+w+20,y+h+20),(0,255,0),2)
cv2.drawContours(image,contours,-1,(255,0,0),2)
cv2.imwrite("hi.jpg",image)




谢谢!

【问题讨论】:

  • 要将手部轮廓与身体其他部分分开,您需要使用阈值算法。你有实际的输入图像吗?
  • 或者您可以检测实际图像中的边缘,然后将其与轮廓图像重叠。
  • 是的,我愿意; i.imgur.com/YOFXf9u.jpg 但我想我需要像“最大面积”这样的东西

标签: python opencv contour


【解决方案1】:

我有一个解决方案(我从HERE 获得了一些帮助),它还有许多其他精彩的图像处理教程,专门针对 OpenCV 用户。)

我先把你上传的图片转换成HSV色彩空间:

HSV = cv2.cvtColor(orimage, cv2.COLOR_BGR2HSV)

然后,一旦将图像转换为 HSV 颜色空间,我就会为皮肤检测设置一个近似范围:

l = np.array([0, 48, 80], dtype = "uint8")
u = np.array([20, 255, 255], dtype = "uint8")

然后我将此范围应用于 HSV 图像:

skinDetect = cv2.inRange(HSV, l, u)

这是我得到的(我还调整了图像的大小以使其更小):

现在你可以在这张图片中找到最大的轮廓,然后进行形态学操作,完美地得到手。

希望这会有所帮助。

【讨论】:

  • 提醒一下,我提到的博文还有很多其他很棒的教程!!
  • 我刚刚在THIS LINK上遇到了另一个涉及YCrCb 颜色空间的解决方案@
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 2017-06-11
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多