【实时手势识别学习笔记1】使用OpenCV调用摄像头获取数据集(上)

今天是2008年5月12日汶川大地震10周年,逝者安息。

 

在完成了环境搭建(具体请翻阅实时手势识别学习笔记第0篇)后,就可以着手搭建学习框架咯。不过由于我们组决定实现的是手语教学,所以需要让机器学习很多的我们自定义的手势,显然这个很难通过从网络获得的数据实现,因此我们有必要通过自己的摄像头来获取手势。同时,因为要拍摄用户的手势,同样要用到摄像头,总之,我们选择了OpenCV框架来帮我们实现这个功能。

关于cv2.VideoCapture

VideoCapture是一个类,构造时需要传递一个Object参数,作为视频的来源。在这里使用0作为参数,则VideoCapture从默认摄像头获取图像。

cap = cv2.VideoCapture(0)

然后可以通过摄像头的指示灯判断摄像头是否开启(逃

其实是可以通过:

cap.isOpened()

来判断,在命令行下如果输出了True,就可以判断摄像头已经开启了。

最后记得使用

cap.release()

释放摄像头。

使用VideoCapture拍摄一张照片

打开命令行(如果是根据第0篇搭建的环境,请进入Anaconda Prompt),然后进入python环境,并执行:

import cv2
cap = cv2.VideoCapture(0)

然后执行

flag, frame = cap.read()

cap.read()提供给我们两个返回值,第一个记为flag,第二个记为frame。

flag保存了这一次read有没有成功读到一帧的信息,是一个布尔值,frame则是截取的帧。

在命令行下查看它们:

>>> flag
>>> frame

可以看到flag为True表示截取成功,frame是一个大矩阵,看起来是一张图片的样子。

然后保存这张照片:

cv2.imwrite("C:\\Users\\LeonWong\\Desktop\\a.jpg", frame)

可以看到照片被保存在桌面上了(为了不让我英俊帅气的脸露在网上,照片进行了处理)<-噫

用窗口显示实时视频

现在我们实现了拍照,那么照片连起来就是视频啦。

同时,为了避免输出到文件这么麻烦,我们选择把视频输出到屏幕。

打开IDE执行下面的代码:

import cv2 

# 调用摄像头 
cap = cv2.VideoCapture(0) 

while True: 
    # 读取一帧
    flag, frame = cap.read()
    # [可选] 把图像翻转过来,第二个参数为2意为沿y轴翻转
    frame = cv2.flip(frame, 2)
    key = cv2.waitKey(1) & 0xFF

    if flag:
        cv2.imshow("Camera Capture", frame)

    if key is ord('q'): 
        break


cap.release()
cv2.destroyAllWindows() 

 

其中,cv2.waitKey(1)是等待用户按下键盘,如果用户按下了键盘,判断这个键是q键,就退出程序。参数1是waitKey的等待时间。

cv2.imshow为我们提供了一个将图像显示到窗口的功能,它的第一个参数是窗口的标题,第二个参数是窗口显示的图像,窗口的大小会根据图像的大小进行调整。

最后通过cv2.destroyAllWindows()销毁所有窗口。

欢迎大家观赏我的床板(逃

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据