使用python3和opencv(cv2)移除手指和手上多余的点

时间:2018-05-07 12:13:11

标签: python-3.x opencv

我在手掌和手指项目上进行测量。我使用凸包和凸面缺陷来检测指尖并绘制我将用于测量的点。参考图片,你可以看到它们指尖上有一个以上的点(拇指,小指,食指等),我想要将它们移除并在每个指尖上只留下一个点。我试图应用极端点,但我只适用于极端的北,南,东和西。我搜索了以前的论文,他们使用的是K曲率角,但我不知道......你能帮助我吗?如果您对如何进行测量有任何想法,请随时指导我。我想用三角形相似度来计算它。

from imutils import contours
import imutils
import time
import cv2
import numpy as np
import math

image=cv2.imread('oo.jpg')
image = imutils.resize (image,height=700)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)
edged = cv2.threshold(gray, 45, 255, cv2.THRESH_BINARY)[1]
edged = cv2.dilate(edged, None, iterations=2)
edged = cv2.erode(edged, None, iterations=2)

cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
c = max(cnts, key=cv2.contourArea)
hull = cv2.convexHull(c,returnPoints = False)
defects = cv2.convexityDefects(c,hull)

for i in range(defects.shape[0]):
    s,e,f,d = defects[i,0]
    start = tuple(c[s][0])
    end = tuple(c[e][0])
    far = tuple(c[f][0])
    cv2.line(image,start,end,[0,255,0],2)
    cv2.circle(image,far,5,[0,0,255],-1)

cv2.drawContours(image, [c], -1, (0, 255, 255), 2)
cv2.imshow("Image", image)
cv2.imwrite("Image.jpg",image)
cv2.waitKey(0) & 0xFF== ord("q")
cv2.destroyAllWindows()

0 个答案:

没有答案