liuhongrun2022 发表于 2023-9-11 21:05:17

还是print的问题


import cv2
from multiprocessing import Pool

ERASE_LINE = '\x1b[2K'
CURSOR_UP_ONE = '\x1b[1A'

def process_frame(frame):
    resized_frame = cv2.resize(frame, (160, 48))
    lines = []
    for row in resized_frame:
      line = ''
      for pixel in row:
            intensity = sum(pixel[:3]) / 3
            if intensity >= 128:# 判断颜色是否较亮
                line += '\033)
            else:
                line += '\033[:3])
      lines.append(line)
    return lines

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

    pool = Pool()
    i = 0
    while True:
      ret, frame = video.read()
      if not ret:
            break

      result = pool.apply_async(process_frame, (frame,))
      lines = result.get()

      for line in lines:
            print(ERASE_LINE + line)
      print(CURSOR_UP_ONE * len(lines), end='')

      i += 1

    video.release()

这段代码,可以打印彩色输出,但不知道怎么的,颜色不太对(好像有些地方会反色,有些地方不会)

https://t1.wodetu.cn/2023/09/11/404cf5226c18b95949bfe2b8fdba8c30.png

isdkz 发表于 2023-9-11 21:05:26

这段代码中,在使用颜色时有些地方使用了 RGB 颜色表示法,而有些地方使用了 BGR 颜色表示法,导致了颜色有些地方反色了。

具体来说,可以将process_frame函数中的以下代码:

if intensity >= 128:
    line += '\033)
else:
    line += '\033[:3])


修改为:

if intensity >= 128:
    line += '\033[::-1])
else:
    line += '\033)


这样就能够保证颜色的一致性了。

liuhongrun2022 发表于 2023-9-11 21:06:55

isdkz 发表于 2023-9-11 21:05
这段代码中,在使用颜色时有些地方使用了 RGB 颜色表示法,而有些地方使用了 BGR 颜色表示法,导致了颜色有 ...

光速!
页: [1]
查看完整版本: 还是print的问题