【无标题】

批量修改文件名

#批量修改文件名,默认操作为将图片按1,2,3,,,顺序重命名
import os
path_in = "./img"  # 待批量重命名的文件夹
class_name = ".jpg"  # 重命名后的文件名后缀
file_in = os.listdir(path_in)  # 返回文件夹包含的所有文件名

num_file_in = len(file_in)  # 获取文件数目
print(file_in, num_file_in)  # 输出修改前的文件名

for i in range(0, num_file_in):
    t = str(i)
    new_name = os.rename(path_in + "/" + file_in[i], path_in + "/" + t + class_name)  # 重命名文件名

file_out = os.listdir(path_in)
print(file_out)  # 输出修改后的结果

视频切片

import cv2

#保持图片
def save_image(num, image):
    image_path = 'img/{}.jpg'.format(str(num))
    cv2.imwrite(image_path, image)

#选择视频路径
file_path = 'video/test.mp4'

#打开视频并判断是否成功
vc = cv2.VideoCapture(file_path)  
if vc.isOpened():
    ret, frame = vc.read()
else:
    ret = False

count = 0  # 切分图片的初始名称。例0.jpg
frame_interval = 5  #每隔5帧进行截取
frame_interval_count = 0

# 循环读取视频帧
while ret:
    ret, frame = vc.read()
    if frame_interval_count % frame_interval == 0:
        save_image(count, frame)
        count += 1
    frame_interval_count += 1
    cv2.waitKey(1)

vc.release()

截取视频

import cv2

cap = cv2.VideoCapture('video/test.mp4')

#获取视频帧数、长宽
fps =  int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 设置VideoWriter以保存新视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('out/test.mp4' , fourcc, 30, (width, height))

ret_val = cap.isOpened()
#跳转到1000帧开始读取
cap.set(cv2.CAP_PROP_POS_FRAMES,1000)

#循环读取
while ret_val:
    now_fps = cap.get(1)
    #可以设置每隔几帧进行保存来压缩视频
    # if (now_fps % 3 != 0):
    #     ret_val = cap.grab()   
    #设置当视频到多少帧时终止
    if (now_fps<130500):
        ret_val = cap.grab()
    elif (now_fps>137000):
        break
    else:
        if ret_val:
            ret, frame = cap.read()
            if (now_fps % 3 != 0):
                ret_val = cap.grab()
                continue
            out.write(frame)
            # 显示帧
            cv2.namedWindow('frame', 0)
            cv2.resizeWindow('frame', 1080, 720)  # 自己设定窗口图片的大小

            cv2.imshow('frame', frame)
            if cv2.waitKey(25) & 0xFF == ord('q'):
                break
        else:
            break

连接摄像头录制视频

import cv2
import datetime

# RTSP流的URL
user, pwd, ip, channel = "admin", "123456", "0.0.0.0", 101

video_stream_path = "rtsp://%s:%s@%s//Streaming/Channels/%d" % (
    user, pwd, ip, channel)  # HIKIVISION new version 2017

#连接到摄像头
while True:
    # 创建视频捕获对象
    cap = cv2.VideoCapture(video_stream_path)
    # 检查视频捕获对象是否成功打开
    if cap.isOpened():
        break

# 获取视频的宽度和高度和帧数
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps =  int(cap.get(cv2.CAP_PROP_FPS))


# 创建视频编码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
#获取现在的时间例如23070810作为保存的视频名称
tx=datetime.datetime.now().strftime('%y%m%d%H')+'.mp4'
output = cv2.VideoWriter(tx, fourcc, 30.0, (width, height))

# 循环读取帧并写入输出文件
while True:
    now_fps = cap.get(1)
    ret, frame = cap.read()

    if not ret:
        cap=cv2.VideoCapture(video_stream_path)
        ret, frame = cap.read()
        continue

    # 在这里可以对帧进行处理(如果需要),即录制10000帧结束
    if now_fps>10000:
        break

    # 将帧写入输出文件
    output.write(frame)
    
    # 显示帧
    cv2.namedWindow('frame', 0)
    cv2.resizeWindow('frame', 1080, 720)
    cv2.imshow('frame', frame)
    
    #按q结束录制
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
output.release()
cv2.destroyAllWindows()

在视频中画图并写入视频

#以获取视频内某区域像素变化值为例

import cv2
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

#切换为图形界面显示的终端TkAgg
matplotlib.use('TkAgg')
# 加载视频q
cap = cv2.VideoCapture('video/test.mp4')
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 设置VideoWriter以保存新视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('ttt.mp4', fourcc, fps, (width, height))

ret_val=cap.isOpened()
p=[]
# 逐帧处理视频
while ret_val:
    now_fps = cap.get(1)
    if (now_fps % 5!= 0):
        ret_val = cap.grab()
        continue
    if ret_val:
        ret, frame = cap.read()
        
        # 定义感兴趣区域的坐标
        x, y, w, h = 300, 140, 200, 150
        # 绘制此区域的矩形框
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # 获取感兴趣区域的像素值
        roi = frame[y:y + h, x:x + w]
        # 计算像素和
        sum_pixel = np.mean(roi)
        #将像素值加入p列表
        p.append(sum_pixel)
        q=list(range(len(p)))

        plot_fig = plt.figure(figsize=(3, 3))
        # 在图像上绘制折线图
        plt.plot(q,p)
        #保存图片到本地并写进视频帧
        plt.savefig('plot.png', bbox_inches='tight')
        plt.close(plot_fig)
        plot_img = cv2.imread('plot.png', cv2.IMREAD_UNCHANGED)
        plot_h, plot_w = plot_img.shape[:2]
        frame[-plot_h:, :plot_w] = plot_img[..., :3] * (plot_img[..., 3:] / 255.0) + \
                                          frame[-plot_h:, :plot_w] * (1.0 - plot_img[..., 3:] / 255.0)
        out.write(frame)

        cv2.imshow('frame',frame)

        if cv2.waitKey(25) & 0xFF == ord('q'):
            break
    else:
        break

# 清理
cap.release()
out.release()
cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值