OpenCV 分割轮廓
OpenCV Splitting Contours
我正尝试在 Python 上使用 OpenCV 检测手部。
我正在处理这个阈值图像:
这是轮廓绘制状态:
我正在尝试检测手,但轮廓太大,它捕获了我的整个 body。
我需要这样:
我的代码:
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)
谢谢!
我有一个解决方案(我从 HERE 那里得到了一些帮助),它还有许多其他专门为 OpenCV 用户提供的关于图像处理的精彩教程。)
我先把你上传的图片转成HSV颜色space:
HSV = cv2.cvtColor(orimage, cv2.COLOR_BGR2HSV)
然后,一旦图像被转换为 HSV 颜色,我就会设置皮肤检测的大致范围 space:
l = np.array([0, 48, 80], dtype = "uint8")
u = np.array([20, 255, 255], dtype = "uint8")
然后我将此范围应用于 HSV 图像:
skinDetect = cv2.inRange(HSV, l, u)
这是我得到的(我还调整了图像的大小以使其变小):
现在你可以找到这个图像中最大的轮廓,然后进行形态学操作,完美地得到手
希望对您有所帮助。
我正尝试在 Python 上使用 OpenCV 检测手部。
我正在处理这个阈值图像:
这是轮廓绘制状态:
我正在尝试检测手,但轮廓太大,它捕获了我的整个 body。
我需要这样:
我的代码:
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)
谢谢!
我有一个解决方案(我从 HERE 那里得到了一些帮助),它还有许多其他专门为 OpenCV 用户提供的关于图像处理的精彩教程。)
我先把你上传的图片转成HSV颜色space:
HSV = cv2.cvtColor(orimage, cv2.COLOR_BGR2HSV)
然后,一旦图像被转换为 HSV 颜色,我就会设置皮肤检测的大致范围 space:
l = np.array([0, 48, 80], dtype = "uint8")
u = np.array([20, 255, 255], dtype = "uint8")
然后我将此范围应用于 HSV 图像:
skinDetect = cv2.inRange(HSV, l, u)
这是我得到的(我还调整了图像的大小以使其变小):
现在你可以找到这个图像中最大的轮廓,然后进行形态学操作,完美地得到手
希望对您有所帮助。