国外课栈 - 国外电子信息技术视角栈

聚焦Python和OpenCV【深阅篇】

 二维码 31
文章附图

滤镜 | 深度传感器手势识别 | 特征匹配和透视变换 | 3D场景重建 | 计算图像 | 跟踪显着对象 | 识别交通信号 | 识别面部表情 | 对象分类和定位 | 检测和跟踪物体


脚本负责运行该应用程序,它首先导入以下模块:

import cv2

import numpy as np

from gestures import recognize

from frame_reader import read_frame

识别函数负责识别手势,我们将在后面部分进行介绍。 为了方便起见,我们还将之前编写的read_frame方法放在单独的脚本中。

为了简化分割任务,我们将指示用户将手放在屏幕中央。 为了对此提供视觉帮助,我们创建以下函数:

def draw_helpers(img_draw: np.ndarray) -> None:

# draw some helpers for correctly placing hand

height, width = img_draw.shape[:2]

color = (0,102,255)

cv2.circle(img_draw, (width // 2, height // 2), 3, color, 2)

cv2.rectangle(img_draw, (width // 3, height // 3),

(width * 2 // 3, height * 2 // 3), color, 2)

该功能在图像中心周围绘制一个矩形,并以橙色突出显示图像的中心像素。

所有繁重的工作都是由main函数完成的,如以下代码块所示:

def main():

for _, frame in iter(read_frame, (False, None)):

该函数在Kinect的灰度帧上进行迭代,并且在每次迭代中,它涵盖以下步骤:

  1. 使用识别功能识别手势,该功能返回估计的伸出手指数(num_fingers)和带注释的BGR彩色图像,如下所示:

    num_fingers, img_draw = recognize(frame)
  1. 调用带注释的BGR图像上的draw_helpers函数,以便为手放置提供视觉帮助,如下所示:

    draw_helpers(img_draw)
  1. 最后,main函数在带注释的帧上绘制手指的数量,使用cv2.imshow显示结果,并设置终止条件,如下所示:

    # print number of fingers on image

    cv2.putText(img_draw, str(num_fingers), (30, 30),

    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255))

    cv2.imshow("frame", img_draw)

    # Exit on escape

    if cv2.waitKey(10) == 27:

    break


因此,既然我们有了主脚本,您将注意到,我们缺少的唯一功能是识别功能。 为了跟踪手势,我们需要编写此功能,我们将在下一部分中进行操作。

阅读完整文档

文章分类: 编程碎语PythonOpenCV