当前位置:首页 » 《关于电脑》 » 正文

少帅下飞机视频转ASCII动画(python+opencv)

16 人参与  2024年10月20日 10:00  分类 : 《关于电脑》  评论

点击全文阅读


话不多说先上图:

实现图中效果的步骤如下:

        1.视频转帧图(Video to Frames)

        2.帧图转字符画(Frames to ASCII)

       3.字符画转图片(ASCII to imgs)

        4.图片合成视频 (imgs to ASCII Video)

1.视频转帧图(Video to Frames)

安装opencv 

pip install opencv-python

视频抽帧成一张张图片:

def video_to_frames(video_path, output_folder, frame_interval=1):    """    将视频抽帧并保存为图片文件。    :param video_path: 视频文件的路径。    :param output_folder: 保存图片帧的文件夹路径。    :param frame_interval: 每隔多少帧抽取一帧,默认为1(即抽取每一帧)。    """    # 打开视频文件    cap = cv2.VideoCapture(video_path)    if not cap.isOpened():        raise IOError("无法打开视频文件")    frame_count = 0    saved_frame_count = 0    while True:        ret, frame = cap.read()        if not ret:            break          if frame_count % frame_interval == 0:            # 保存帧            output_path = os.path.join(output_folder, f"frame_{saved_frame_count:04d}.jpg")            cv2.imwrite(output_path, frame)            saved_frame_count += 1        frame_count += 1    cap.release()

2.帧图转字符画(Frames to ASCII)

def image_to_colored_ascii(image_path, output_width, output_height):    resized_image = resize_image(image_path, output_width, output_height)    ascii_image = []    ascii_image_chars = []    ascii_image_colors=[]    for y in range(output_height):        row = ""        for x in range(output_width):            color = resized_image.getpixel((x, y))            gray_value = sum(color) // 3            char_index = int(gray_value / 255 * (len(colored_ascii_chars) - 1))            if char_index >= len(colored_ascii_chars):                char_index = len(colored_ascii_chars) - 1            row += f"\033[38;2;{color[0]};{color[1]};{color[2]}m{colored_ascii_chars[char_index]}"            ascii_image_chars.append(colored_ascii_chars[char_index])            ascii_image_colors.append((color[0], color[1], color[2]))        ascii_image.append(row)    return "\n".join(ascii_image), ascii_image_chars, ascii_image_colors

3.字符画转图片(ASCII to imgs)

# 将 ASCII 艺术图像存储为图片def save_colored_ascii_image_as_picture(ascii_image_chars, ascii_image_colors, font_path, font_size, output_path):    image = Image.new('RGB', ((output_width * font_size), (output_height * font_size)), color='black')    draw = ImageDraw.Draw(image)    font = ImageFont.truetype(font_path, font_size)    for i in range(output_height):        for j in range(output_width):            draw.text((j * font_size, i * font_size), ascii_image_chars[i*output_width+j], font=font, fill=ascii_image_colors[i*output_width+j])    image.save(output_path)

4.图片合成视频 (imgs to ASCII Video)

def process_images_in_directory(input_dir, output_dir, output_width, output_height, font_path, font_size):    if not os.path.exists(output_dir):        os.makedirs(output_dir)    # 支持的图片格式列表    supported_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.gif')    index = 0    # 遍历目录中的所有文件    for filename in os.listdir(input_dir):        if filename.lower().endswith(supported_extensions):            input_path = os.path.join(input_dir, filename)            output_path = os.path.join(output_dir, "ss_00" + str(index) + ".jpg")            index += 1            # 将图像转换为彩色ASCII字符画            colored_ascii_image, colored_ascii_image_chars, colored_ascii_image_colors = image_to_colored_ascii(input_path, output_width, output_height)            # 存储彩色ASCII字符画到图片文件            save_colored_ascii_image_as_picture(colored_ascii_image_chars, colored_ascii_image_colors, font_path, font_size, output_path)

结尾tips:OpenCV读取的文件路径中不能带有中文字符,否则会报错:

完结。。。

参考 Python 制作 ASCII 字符画 


点击全文阅读


本文链接:http://zhangshiyu.com/post/174451.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 京圈佛子破戒后,我改嫁京圈纨绔(沈墨渊,白晶晶)
  • 前世被闺蜜害死,重生后我让她从太子妃变疯女苏婉儿,清歌完本_前世被闺蜜害死,重生后我让她从太子妃变疯女(苏婉儿,清歌)
  • 全书浏览七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)_七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)全书结局
  • 今天也没变成昨天(周扬陈默)全书免费_(周扬陈默)今天也没变成昨天后续(周扬陈默)
  • 重生后,秦总非要父以子贵(许沐晴,秦越泽)全书浏览_重生后,秦总非要父以子贵全书浏览
  • 他嫌弃我喝两块钱豆浆上不了台面,我结婚后他又哭又闹全书万照,白青青在线
  • 昭然若梦前尘烬列表_昭然若梦前尘烬(温昭然方池雲)
  • 导师借我股票账号,我倒欠五十万(孟潇潇,宁薇)_导师借我股票账号,我倒欠五十万孟潇潇,宁薇
  • 拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾(周钰泽,蒋清清,思源)全书浏览_拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾全书浏览
  • 我的人生,你已出局(程森凌古楚文)_我的人生,你已出局程森凌古楚文
  • 穿书成病娇女配,睁眼就签下离婚协议书(朱楼)_穿书成病娇女配,睁眼就签下离婚协议书
  • 老婆逼我给白月光捐肾,我死后她悔疯了(宋逸晨沈墨白)全书浏览_老婆逼我给白月光捐肾,我死后她悔疯了全书浏览

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1