上次我们中标操练了手掌识别器

上次大家中标操练了手心识别器

图片 1

接下去须要动用opencv来获取手掌,去除背景某个,这里就要求用到掩膜(mask)、ROI(region
of interest卡塔尔国等有关文化,具体的概念如故不讲了,网络海人民广播电视台湾大学。

第黄金年代从图中依照上次的次第相框部分提取手掌(当然自身截图再保存也足以-.-)如下

 图片 2

接下去讲授一下领取手掌的方法

  1. 将图纸copy,并将图片转变为ycrcb情势,依据ycrcb中的肤色获取和手掌颜色周围的有个别,生成黑白图片
  2. 行使黑白图片获得最大的概貌并扭转轮廓图片并拿走多少个像样的椭圆
  3. 依靠椭圆角度展开旋转(原图片和黑白图片及轮廓图片同有时候旋转)以尽量的将魔掌放为竖直
  4. 基于原图片和黑白图片,利用黑白图片作为掩膜,获得的原图片如下:

  图片 3

  提取手掌中央:

  算法观念:根据黑白图片,基于间隔转变获得手掌中央,并基于最大半径画入手掌的内切圆如图

  图片 4

代码如下

 distance = cv2.distanceTransform(black_and_white, cv2.DIST_L2, 5, cv2.CV_32F)
    # Calculates the distance to the closest zero pixel for each pixel of the source image.
    maxdist = 0
    # rows,cols = img.shape
    for i in range(distance.shape[0]):
        for j in range(distance.shape[1]):
            dist = distance[i][j]
            if maxdist < dist:
                x = j
                y = i
                maxdist = dist

 cv2.circle(original, (x, y), maxdist, (255, 100, 255), 1, 8, 0)

   提取掌纹

    现在大家已知了圆的半径和圆心坐标,由此得以依据ROI提抽出内切长方形(固然内切长方形会损失很多的音信,不过当前自个儿还不曾想到别的的更加好的秘诀),作出长方形如下

图片 5

作星型并领取的代码如下

final_img = original.copy()
#cv2.circle() this line 
half_slide = maxdist * math.cos(math.pi / 4)
    (left, right, top, bottom) = ((x - half_slide), (x + half_slide), (y - half_slide), (y + half_slide))
    p1 = (int(left), int(top))
    p2 = (int(right), int(bottom))
    cv2.rectangle(original, p1, p2, (77, 255, 9), 1, 1)
    final_img = final_img[int(top):int(bottom),int(left):int(right)]

运作截图

图片 6

能够看见现身了中灰部分,按理说是不会存在的,使用cv2.imwrite发掘并未有现身其余问题,如图

图片 7

以为是cv2.imshow对于出口图片的像素大小有鲜明范围,实行了电动填写大概是私下认可有青古铜色作为背景象且比在那处我们领到出的图样要大

代码地址:

感谢:

1.
这位老哥的repo,基于肤色的领取和多变相符椭圆给自己的启迪十分的大(就算后半有的完全未有用…..卡塔 尔(英语:State of Qatar)

2.
就算遵照间距变化仿效至此处的回应,不过也总算马到功成了提问者的要求。

转发请注解出处

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website