使用pygame
在Python中开发YUV查看器。
下面的代码显示一帧YUV 4:2:0
#!/usr/bin/env python
import pygame
W = 352
H = 288
WH = (W, H)
pygame.init()
screen = pygame.display.set_mode(WH)
overlay = pygame.Overlay(pygame.YV12_OVERLAY, WH)
fd = open('foreman.yuv', 'rb')
y = fd.read(W * H)
u = fd.read(W * H / 4)
v = fd.read(W * H / 4)
overlay = pygame.Overlay(pygame.YV12_OVERLAY, WH)
overlay.display((y, u, v))
此代码在位置 (0,0) 处显示一个 16x16 半透明矩形
pygame.init()
screen = pygame.display.set_mode(WH)
s = pygame.Surface((16,16))
s.set_alpha(128)
s.fill((255,255,255))
screen.blit(s, (0,0))
pygame.display.flip()
但是,我该如何组合它们呢? IE。如何在 YUV 数据顶部的 (0,0) 位置显示半透明矩形,以便可以通过矩形看到 YUV 数据?
最佳答案
这是一个叠加层。你不能把其他东西“放在上面”:来自 docs :
The overlay objects are always visible, and always show above the regular display contents.
YUV 覆盖利用媒体播放器通常使用的硬件来显示视频。内容通常永远不会写入“帧缓冲区”(对于屏幕截图/屏幕捕获软件等的空白区域造成无尽的痛苦)。
因此,您必须将要添加的内容直接绘制到 y、u、v 数据中。 (或者将y、u、v数据转换为RGB数据并通过更常规的方式显示)。
关于python - 在 YUV 叠加上绘制透明矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263106/