上次我们成功训练了手掌识别器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到识别的结果如图

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

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

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

  1. 将图片copy,并将图片转换为ycrcb模式,根据ycrcb中的肤色获取和手掌颜色相近的部分,生成黑白图片
  2. 使用黑白图片获得最大的轮廓并生成轮廓图片并得到一个近似的椭圆
  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提取出内切正方形(虽然内切正方形会损失很多的信息,但是目前我还没有想到其他的更好的办法),作出正方形如下

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

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)]

运行截图

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

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

代码地址:https://github.com/takefetter/Get_PalmPrint/blob/master/process_palm.py

感谢:

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

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

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

Python学习-使用opencv-python提取手掌和手心及部分掌纹的更多相关文章

  1. python学习第九讲,python中的数据类型,字符串的使用与介绍

    目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...

  2. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  3. python学习第三讲,python基础语法之注释,算数运算符,变量.

    目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...

  4. python学习第一讲,python简介

    目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...

  5. Python学习教程(Python学习视频_Python学些路线):Day06 函数和模块的使用

    Python学习教程(Python学习视频_Python学些路线):函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x ...

  6. python入门灵魂5问--python学习路线,python教程,python学哪些,python怎么学,python学到什么程度

    一.python入门简介 对于刚接触python编程或者想学习python自动化的人来说,基本都会有以下python入门灵魂5问--python学习路线,python教程,python学哪些,pyth ...

  7. 我的Python学习之路 Python的输入输出与基本数据类型

    *** python中的变量不需要事先声明再使用,而可以直接来一个变量名,后面一个赋值,接着一个数据值,如 hw = "hello python",相当于Python能智能的根据你 ...

  8. 我的Python学习之路 Python的初识与准备工作

    注:文笔不好,不喜勿喷,当个段子看看就好 一.初识Python 第一次听到Python是在2016年大概暑假 时候(即将大三),因为对黑客技术的蜜汁热爱(虽然自己并不会),在玄魂大大的公众微信号中看到 ...

  9. python 学习笔记 9 -- Python强大的自省简析

    1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...

随机推荐

  1. [学习OpenCV攻略][012][读取、修改、保存图像]

    使用 imread 读取图像,图像路径为 imageName ,图像按BGR格式读取. image = imread( imageName, CV_LOAD_IMAGE_COLOR); 将RGB图像转 ...

  2. 使用 Gacutil.exe 将.Net程序集添加到GAC的方法

    使用gacutil.exe工具安装:gacutil -i "要注册的dll文件全路径" "gacutil.exe”工具为.NET自带工具 ,需要注意的是:这个工具在.NE ...

  3. Solr学习笔记2(V7.2)---导入自己的数据

    学而不思则罔,思而不学则殆,总是看文档不动手效果是不好的.没有实地的从自己的数据库获取数据测试一下始终是空,总结一下自己的操作步骤吧. 第一步准备配置文件 E:\Solr\server\solr\co ...

  4. HTML5 Canvas圆盘抽奖应用(适用于Vue项目)

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  5. 【Android】屏幕尺寸的表示

    1. 单位 - px(pixel): 普通的像素点描述,位图中的一个颜色点(RGBA或者YUV) - dip(device independent pixels): 设备独立像素. - dp: 与di ...

  6. Python3.6.1的安装

    Python 3.61的下载和安装,下载地址:https://www.python.org/downloads/ 选择最近的版本,目前为Python3.6.1,下载后直接安装即可 下载包为: 双击安装 ...

  7. Windows10下用Anaconda3安装TensorFlow教程

    这是我在自己的笔记本电脑上用Anaconda3安装TensorFlow的教程 1. 安装好Anaconda3版本 (1) 注:可以发现最新版本是Anaconda5了(没关系,下载就是了) (2) 注意 ...

  8. Shell读取配置文件的方法

    参考:http://www.cnblogs.com/binbinjx/p/5680214.html 做批量软件安装自动化时,都喜欢用配置文件的方式改变参数,那怎么通过shell读取配置文件的配置呢?参 ...

  9. 译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换

    本文是翻译内容,原文参见: Anatomy of a Web Service: XML, SOAP and WSDL for Platform-independent Data Exchange We ...

  10. Linux批量ping脚本

    根据鸟哥的ping脚本,我重新修改了一下.用到的知识有:read.Linux按行读取.shell输出效果调整等 其中Linux按行读取文件比较重要,可参看文下链接 1 脚本功能: 批量ping当前路径 ...