Python实现电影条形码生成

电影条形码(Movie Barcode)是一种将电影的各个帧缩减并排列在一起的艺术形式,可以将整个电影的颜色调和情绪压缩到一个简单的图片中。这种条形码样式的影片总结可以给人们一个快速而全面的印象,展示出电影的整体视觉美学和颜色调度。

例如:

创建电影条形码的过程通常包括以下步骤:

  1. 提取电影的每一帧。电影的每一帧都是一个静止的图像,通常每秒有24帧。

  2. 将每一帧缩减为一个垂直的线条。这个线条的颜色是这一帧的平均颜色。

  3. 将所有的线条按照它们在电影中出现的顺序放置在一起。结果就是一张像条形码一样的图片。

通过这个过程,你可以看到电影的色彩变化和主要的视觉元素。这对于理解电影的美学,特别是颜色和光线如何被使用,非常有用。它也可以让你快速地比较不同电影的视觉风格。

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


def create_movie_barcode(video_path, output_path, input_number, progressbar):
    # 读取视频文件
    cap = cv2.VideoCapture(video_path)

    # 获取视频的总帧数
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

    # 创建一个空的列表来存储每一帧的平均颜色
    avg_colors = []

    current_frame = 0

    # 在这里设置进度条的最大值
    progressbar["maximum"] = total_frames

    while True:
        # 读取一帧
        ret, frame = cap.read()

        # 如果帧没有正确读取,那么我们已经到了视频的结尾
        if not ret:
            break

        # 计算这一帧的平均颜色
        avg_color_per_row = np.average(frame, axis=0)
        avg_color = np.average(avg_color_per_row, axis=0)

        # 将平均颜色添加到列表中
        avg_colors.append(avg_color)

        # 打印进度
        current_frame += 1
        print(f'Processing frame {current_frame} of {total_frames} ({100.0 * current_frame / total_frames:.2f}%)')

        # 更新进度条的值
        progressbar["value"] = current_frame
        # 更新GUI
        root.update()

    # 关闭视频文件
    cap.release()

    # 创建条形码
    barcode = np.zeros((input_number, len(avg_colors), 3), dtype=np.uint8)
    for i, color in enumerate(avg_colors):
        barcode[:, i] = color

    # 将条形码保存为图片文件
    plt.imshow(cv2.cvtColor(barcode, cv2.COLOR_BGR2RGB))
    plt.axis('off')
    cv2.imwrite(output_path, barcode)

当然我还写了一个GUI界面,我已打包,可以直接运行。直接运行exe文件,读取视频,设置纵向像素宽度即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值