基于opencv2.4.8和 python 2.7实现简单的手势识别。
以下为基本步骤
1.去除背景,提取手的轮廓
2. rgb->yuv,同时计算直方图
3.进行形态学滤波,提取感兴趣的区域
4.找到二值化的图像轮廓
5.找到最大的手型轮廓
6.找到手型轮廓的凸包
7.标记手指和手掌
8.把提取的特征点和手势字典中的进行比对,然后判断手势和形状
提取手的轮廓 cv2.findcontours()
找到最大凸包cv2.convexhull(),然后找到手掌和手指的相对位置,定位手型的轮廓和关键点,包括手掌的中心,手指的相对位置
特征字典主要包括以下几个方面:名字,手掌中心点,手掌的直径,手指的坐标点,手指的个数,每个手指之间的角度
例如:
1
2
3
4
5
6
7
|
# begin ------------------------------------#
v = gesture( "v" )
v.set_palm(( 475 , 225 ), 45 )
v.set_finger_pos([( 490 , 90 ),( 415 , 105 )])
v.calc_angles()
dict [v.getname()] = v
# end --------------------------------------#
|
最终的识别结果如下:
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
|
frame = hand_threshold(fg_frame,hand_histogram)
contour_frame = np.copy(frame)
contours,hierarchy = cv2.findcontours(contour_frame,cv2.retr_tree,cv2.chain_approx_simple)
found,hand_contour = hand_contour_find(contours)
if (found):
hand_convex_hull = cv2.convexhull(hand_contour)
frame,hand_center,hand_radius,hand_size_score = mark_hand_center(frame_original,hand_contour)
if (hand_size_score):
frame,finger,palm = mark_fingers(frame,hand_convex_hull,hand_center,hand_radius)
frame,gesture_found = find_gesture(frame,finger,palm)
else :
frame = frame_original
|
以上这篇opencv+python手势识别框架和实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/linsk/article/details/76457955