我有一个皮肤检测脚本,该脚本取自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。
答案 0 :(得分:1)
类似于皮肤检测,您可以创建过滤器以检测形状及其在图像中的相对位置。假设您采用10x10的矩阵,并在其中绘制一条看起来像指尖的线。在应该有空格的地方使用0,在指尖应该使用大的数字。在图像中开始一个0,0并应用10x10矩阵,获得总和并将其乘以0,0到一个新矩阵中。将滤镜移动一个像素以上,然后再次运行。遍历整个图像,新矩阵(激活整个功能的网格)将向您显示形状的位置。新矩阵中的最高数字可能在您的指尖。
这或多或少是卷积神经网络如何识别图像特征的方式,应该很容易应用于您的情况。也许谷歌在CNN如何使用卷积滤波器识别特征的过程中看到一些示例。