python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

Posted 我爱学Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹相关的知识,希望对你有一定的参考价值。

接下来需要使用opencv来获取手掌,去除背景部分,这里就需要用到掩膜(mask)、ROI(region of interest)等相关知识,具体的概念还是不讲了,网上很多。

首先从图中根据上次的程序画框部分提取手掌(当然自己截图再保存也可以-.-)如下

 python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

接下来讲解一下提取手掌的方法

  1. 将图片copy,并将图片转换为ycrcb模式,根据ycrcb中的肤色获取和手掌颜色相近的部分,生成黑白图片

  2. 使用黑白图片获得最大的轮廓并生成轮廓图片并得到一个近似的椭圆

  3. 根据椭圆角度进行旋转(原图片和黑白图片及轮廓图片同时旋转)以尽可能的将手掌放为竖直

  4. 根据原图片和黑白图片,利用黑白图片作为掩膜,得到的原图片如下:

  python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

  提取手掌中心:

  算法思想:根据黑白图片,基于距离变换得到手掌中心,并根据最大半径画出手掌的内切圆如图

  python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

代码如下:

python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

提取掌纹

    现在我们已知了圆的半径和圆心坐标,因此可以根据ROI提取出内切正方形(虽然内切正方形会损失很多的信息,但是目前我还没有想到其他的更好的办法),作出正方形如下

python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

作正方形并提取的代码如下

python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

运行截图

python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹

可以看到出现了灰色部分,按理说是不会存在的,使用cv2.imwrite发现没有出现任何问题,如图

感觉是cv2.imshow对于输出图片的像素大小有一定限制,进行了自动填充或者是默认有灰色作为背景色且比在这里我们提取出的图片要大


感谢:https://github.com/dev-td7/Automatic-Hand-Detection-using-Wrist-localisation 这位老哥的repo,基于肤色的提取和形成近似椭圆给我的启发很大(虽然后半部分完全没有用.....)

http://answers.opencv.org/question/180668/how-to-find-the-center-of-one-palm-in-the-picture/ 虽然基于距离变化参考至这里的回答,不过也算是完成了提问者的需求。

作者:take-fetter

转载请注明出处http://www.cnblogs.com/take-fetter/p/8453589.html


以上是关于python大佬为你详细讲解使用opencv-python提取手掌和手心及部分掌纹的主要内容,如果未能解决你的问题,请参考以下文章

一文为你详细讲解对象映射库AutoMapper所支持场景

大佬详细告诉你实战四种不同爬虫解析数据方法,保姆级讲解 必须掌握!

Python opencv 简单的车牌识别 —— 简单学习

Python opencv 简单的车牌识别 —— 简单学习

ES6 set和map超详细讲解

Python其实很简单!从零基础到大佬,超详细知识点汇总,附教程