python一帧一帧读取视频_python提取视频第一帧图片

# -*- coding: utf-8 -*-

import cv2

from PIL import Image

from io import BytesIO

def tryTime(maxTry, timeout=random.random()):

"""

重试

:param maxTry:重试次数

:param timeout:睡眠时间

:return:

"""

def wrap1(func):

#functools.wraps 可以将原函数对象的指定属性复制给包装函数对象,

@functools.wraps(func)

def __decorator(*args,**kwargs):

tryTime = 0

while tryTime < maxTry:

try:

return func(*args,**kwargs)

except Exception:

pass

# print("TryTime_except==%s"%traceback.format_exc())

# logDebug("tryTime","TryTime_except==%s"%traceback.format_exc())

tryTime += 1

time.sleep(timeout)

return __decorator

return wrap1

@tryTime(2)

def get_video_cover(url):

cap = cv2.VideoCapture(url)

rate = cap.get(5)

frame_number = cap.get(7) # 视频文件的帧数

if rate==0:

duration=0

else:

duration = int(frame_number / rate) # 单位秒

cap.set(1, 1) # 取它的第一帧

rval, frame = cap.read() # 如果rval为False表示这个视频有问题,为True则正常

data = cv2.imencode(".jpg", frame)[1].tobytes() # 将图片转为jpg格式的二进制流

cap.release()

height = frame.shape[0] # 高度

width = frame.shape[1] # 宽度

return data, duration, width, height

def get_image_size(data):

im = Image.open(BytesIO(data))

return im.size

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提取视频的关键,可以使用以下算法: 1. 首先,将视频分成一些连续的。可以使用OpenCV这样的库来做到这一点。 2. 计算每一帧与前一帧之间的差异。可以使用像素差异或直方图差异等方法来计算之间的差异。 3. 根据差异值确定关键。如果差异值超过一个设定的阈值,则认为该是关键。可以通过试验找到一个合适的阈值。 4. 将关键保存下来。可以将关键保存为图像文件,或将其插入到视频中。 下面是一个简单的Python代码示例,演示如何使用OpenCV库提取视频的关键: ``` import cv2 # 打开视频文件 cap = cv2.VideoCapture('video.mp4') # 读取第一 ret, frame1 = cap.read() # 初始化前一帧 prev_frame = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) # 设置阈值 threshold = 10000 # 提取关键 key_frames = [] while True: # 读取当前 ret, frame2 = cap.read() if not ret: break # 将当前转换为灰度图像 curr_frame = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY) # 计算之间的差异 diff = cv2.absdiff(curr_frame, prev_frame) # 检查差异是否超过阈值 if diff.sum() > threshold: key_frames.append(frame2) # 更新前一帧 prev_frame = curr_frame # 保存关键 for i, key_frame in enumerate(key_frames): cv2.imwrite(f'key_frame_{i}.jpg', key_frame) # 释放视频文件 cap.release() ``` 这个代码示例打开一个名为`video.mp4`的视频文件,提取其中的关键,并将它们保存为图像文件。关键的阈值设置为`10000`,可以根据需要进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值