1.对调用摄像头对视频进行读取
import numpy as np
import cv2 as cv
import cv2
import os
# 文件路径,这里要根据实际需求调整路径,可以是绝对路径也可以是相对路径
file_path = r'C://Users//86139//Desktop//1//video//1.avi'
# 获取文件所在的目录路径
directory = os.path.dirname(file_path)
# 判断文件所在的目录是否存在,如果不存在则创建目录
if not os.path.exists(directory):
os.makedirs(directory)
# 创建一个视频捕获对象cap,0代表默认的摄像头设备
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 对像素的定义
WIDTH = 1920
HEIGHT = 1920
FILENAME = r'C://Users//86139//Desktop//1//video//1.avi'
# 定义帧率
FPS = 24
# 用cap.set设置cap的帧率属性
cap.set(cv2.CAP_PROP_FPS,24)
# 采用XVID编码格式,常用于生成.avi格式的视频文件
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# (具体路径和文件名,格式,帧率,大小)
out = cv2.VideoWriter(FILENAME,fourcc = fourcc, fps = FPS, frameSize=(WIDTH,HEIGHT))
while True:
# ret是一种对图像读取的判断,frame是视频帧
ret, frame = cap.read()
if not ret:
print("can not read")
break
# 因为镜像缘故需要翻转,其中1表示在y轴上面 0在x轴上,-1水平竖直都翻转
frame = cv2.flip(frame,1)
# 将视频帧frame写入out 为了if的判断
ret = out.write(frame)
# 显示
cv2.imshow("frame",frame)
# 摁q退出
if cv2.waitKey(1) == ord('q'):break
# 释放视频写入对象所占用的资源
out.release()
cap.release()
cv2.destroyAllWindows()
以上代码是对摄像头的读取、处理、写入、显示操作
2.识别左右手的实验
所用到的包
import cvzone
from cvzone.HandTrackingModule import HandDetector
import numpy as np
import cv2 as cv
import cv2
import os
from cvzone.HandTrackingModule import HandDetector
# 文件路径,这里要根据实际需求调整路径,可以是绝对路径也可以是相对路径
file_path = r'C://Users//86139//Desktop//1//video//1.avi'
# 获取文件所在的目录路径
directory = os.path.dirname(file_path)
# 判断文件所在的目录是否存在,如果不存在则创建目录
if not os.path.exists(directory):
os.makedirs(directory)
# 创建一个视频捕获对象cap,0代表默认的摄像头设备
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 对像素的定义
WIDTH = 1920
HEIGHT = 1920
FILENAME = r'C://Users//86139//Desktop//1//video//1.avi'
# 定义帧率
FPS = 24
# 用cap.set设置cap的帧率属性
cap.set(cv2.CAP_PROP_FPS,24)
# 采用XVID编码格式,常用于生成.avi格式的视频文件
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# (具体路径和文件名,格式,帧率,大小)
out = cv2.VideoWriter(FILENAME,fourcc = fourcc, fps = FPS, frameSize=(WIDTH,HEIGHT))
# 创建一个HandDetector对象detector,用于检测视频帧中的人手。
# 参数detectionCon=0.8表示手部检测的置信度阈值,即只有当检测到手部的置信度高于0.8这个值时,才会认为检测到的结果是有效的手部信息。
# maxHands=1表示最多检测一只手,可根据实际需求调整该参数,比如设置为2可检测两只手等。
detector = HandDetector(detectionCon=0.8, maxHands=1)
while True:
sucess,img = cap.read()
if not sucess:
print("can not read")
break
img = cv2.flip(img, 1)
# 不进行额外翻转,在前面已经定义过了
hands,img = detector.findHands(img,flipType=False)
cv2.imshow("image",img)
cv2.waitKey(0)
# 释放视频写入对象所占用的资源
out.release()
cap.release()
cv2.destroyAllWindows()
3.结果演示
简简单单,快去ctrl cv一下吧