opencv对视频进行处理(后有检测手的目标识别小实验)

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一下吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值