首页 > 解决方案 > 在皮肤检测图像中查找指尖、面积和最大直径

问题描述

我有一个皮肤检测脚本,是从 本教程中获取的。它工作得很好,但现在我希望能够在找到的掩码中找到感兴趣的点,例如 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。

标签: pythonopencv

解决方案


与皮肤检测类似,您可以创建过滤器来检测形状及其在图像中的相对位置。假设您采用一个 10x10 矩阵,并在其中绘制一条看起来像指尖的线。在应该有空格的地方使用 0,在应该在指尖的地方使用大数字。在您的图像中开始一个 0,0 并应用 10x10 矩阵,获得和积并将其放入新矩阵中的 0,0 中。将过滤器移动到一个像素上并再次运行。遍历整个图像,您的新矩阵(总特征激活的网格)将显示形状在哪里。新矩阵中的最高数字可能是您的指尖所在的位置。

这或多或少是卷积神经网络识别图像特征的方式,在您的情况下应该很容易应用。也许谷歌 CNNs 如何使用过滤器卷积来识别特征以查看一些示例。


推荐阅读