我有一个皮肤检测脚本,该脚本是从this tutorial.上获取的,它工作得很好,但现在我希望能够在找到的蒙版中找到感兴趣的点,例如1)指尖(如果一根手指伸出,例如食指,从上方看),2)最大直径和3)面积。
以下是相关代码:
lower = np.array([0, 48, 80], dtype = "uint8")
upper = np.array([20, 255, 255], dtype = "uint8")
converted = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
skinMask = cv2.inRange(converted, lower, upper)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11, 11))
skinMask = cv2.erode(skinMask, kernel, iterations = 2)
skinMask = cv2.dilate(skinMask, kernel, iterations = 2)
skinMask = cv2.GaussianBlur(skinMask, (3, 3), 0)
skin = cv2.bitwise_and(frame, frame, mask = skinMask)
蒙皮的形状为(640,480)矩阵,其中检测到皮肤的每个点均为255,而其他每个点均为0。
最佳答案
与皮肤检测类似,您可以创建过滤器来检测形状及其在图像中的相对位置。假设您采用10x10的矩阵,并在其中绘制一条看起来像指尖的线。在应该有空格的地方使用0,在指尖应该使用大的数字。在图像中开始一个0,0并应用10x10矩阵,获得总和并将其乘以0,0到一个新的矩阵中。将滤镜移动一个像素以上,然后再次运行。遍历整个图像,新矩阵(整个功能激活的网格)将向您显示形状的位置。新矩阵中的最高数字可能在您的指尖所在的位置。
卷积神经网络或多或少地通过这种方式识别图像中的特征,并且在您的案例中应该很容易应用。也许谷歌搜索CNN如何使用卷积滤波器识别特征,以查看一些示例。
关于python - 在皮肤检测图像中找到指尖,面积和最大直径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53837473/