鱼C论坛

 找回密码
 立即注册
查看: 3757|回复: 8

[已解决]print问题

[复制链接]
发表于 2023-9-10 19:19:28 | 显示全部楼层    本楼为最佳答案   
这段代码每打印一帧就会清除,可以通过在控制台上打印 ANSI 转义序列来实现在同一位置上更新帧。以下是修改后的代码:

  1. import cv2
  2. import os
  3. from multiprocessing import Pool

  4. # ANSI 转义序列,用于在同一位置上更新帧
  5. ERASE_LINE = '\x1b[2K'
  6. CURSOR_UP_ONE = '\x1b[1A'

  7. def process_frame(frame):
  8.     gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  9.     resized_frame = cv2.resize(gray_frame, (160, 48))
  10.     lines = []
  11.     for row in resized_frame:
  12.         line = ''.join(['█' if pixel >= 128 else ' ' for pixel in row])
  13.         lines.append(line)
  14.     return lines

  15. if __name__ == '__main__':
  16.     video = cv2.VideoCapture('1.mp4')
  17.     total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

  18.     pool = Pool()  # 创建进程池
  19.     i = 0
  20.     while True:
  21.         ret, frame = video.read()
  22.         if not ret:
  23.             break

  24.         result = pool.apply_async(process_frame, (frame,))  # 异步调用process_frame函数
  25.         lines = result.get()  # 获取处理结果

  26.         # 在同一位置上更新帧
  27.         for line in lines:
  28.             print(ERASE_LINE + line)
  29.         print(CURSOR_UP_ONE * len(lines), end='')

  30.         i += 1
  31.         print("已经打印的帧数:", i)
  32.         print("总帧数:", total_frames)

  33.     video.release()
复制代码


在这个修改后的代码中,我们使用 ANSI 转义序列来实现在同一位置上更新帧。 ERASE_LINE  变量用于清除当前行, CURSOR_UP_ONE  变量用于将光标移动到上一行,以便在同一位置上更新帧。 print(CURSOR_UP_ONE * len(lines), end='')  用于将光标移动到帧的第一行,以便下一帧能够在正确的位置上打印。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-23 05:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表