opencv 标注视频并截取每一帧

python 使用opencv标注视频,同时截取帧保存为图片。

pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ 必要
pip3 install pillow 必要

redis和request不是必须的,这是其他流程需要所以引用
pip3 install redis 非必要
pip install requests -i https://mirrors.aliyun.com/pypi/simple/ 非必要

方法一、直接截图并标注视频

# 视频标注
import cv2
import os
import numpy
import ast
from PIL import Image, ImageDraw, ImageFont
import redis
import json
import requests

#接收java参数
# fromPath = argv[1]
# toPath = argv[2]
# dirPath = argv[3]
# key_prefix = argv[4]
# redisIp = 'argv[5]'

fromPath = 'E:\\ztest\\200M20201116114531.mp4'
toPath = 'E:\\ztest\\200M20201116114531_test.mp4'
dirPath = 'E:/ztest/pic/'
key_prefix = 'fimename'
redisIp = ''

video = fromPath
result_video = toPath

# 给图片添加汉字
def cv2ImgAddText(img, text, left, top, text_color, text_size):
    if isinstance(img, numpy.ndarray):
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype("msyh.ttc", text_size, encoding="utf-8")
    draw.text((left, top), text, text_color, font=fontText)
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

# redis存值
def setToRedis(key, value):
    r = redis.StrictRedis(host=redisIp, port=6379, db=0)
    r.set(key, value)

# redis取值
def getFromRedis(key):
    r = redis.StrictRedis(host=redisIp, port=6379, db=0)
    return r.get(key)

#发送请求并传参
def sendRequest(fileName):
    url = 'http://localhost:8188/test'
    data = {'fileName': key_prefix}
    requests.get(url, data)


# 获取txt内容
# with open(txt_path, 'r', encoding='utf-8') as f:
#     content = f.read()
#     content = ast.literal_eval(content)


# 读取视频
cap = cv2.VideoCapture(video)
# 获取视频帧率
fps_video = cap.get(cv2.CAP_PROP_FPS)
# 设置写入视频的编码格式
fourcc = cv2.VideoWriter_fourcc("H", "2", "6", "4")
# 获取视频宽度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 获取视频高度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
videoWriter = cv2.VideoWriter(result_video, fourcc, fps_video, (frame_width, frame_height))
frame_id = 0
# 获取视频帧数
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 获取帧的间隔
frame_interval = 1

for i in range(frame_count):
    ret, frame = cap.read()

    # 每隔frame_interval帧进行一次截屏操作
    if i % 1 == 0:
        x1 = 110
        y1 = 150
        x2 = 200
        y2 = 250
        text = '哈哈'

        # 添加中文
        frame = cv2ImgAddText(frame, text, (x1), (y1), (55, 255, 155), 40)
        # 矩形框
        cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 4)
        # 截图
        cv2.imwrite(dirPath + '/' + str(i) + '.jpg', frame)
        # 将标注内容写入视频
        videoWriter.write(frame)
# 执行结束释放资源
cap.release()

视频结果在这里插入图片描述
截图结果

Java调用python并传参参考demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值