2012-04-21 2 views
2

pygame을 사용하여 Python으로 YUV 뷰어에서 작업합니다.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)) 

이 코드는 16 × 16 위치 반투명 직사각형 (0,0)

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() 

하지만 어떻게 표시 나는 그들을 결합합니까? 나는. YUV 데이터 상단에 위치 (0,0)에 반투명 사각형을 표시하여 사각형을 통해 YUV 데이터를 볼 수 있습니까?

답변

2

오버레이입니다.

오버레이 객체는 항상 볼 수 있습니다, 항상 위의 일반 표시 내용을 표시 : docs에서 : 당신은 그것의 "위에"다른 물건을 넣을 수 없습니다.

YUV 오버레이는 미디어 플레이어가 일반적으로 비디오를 표시하는 데 사용하는 하드웨어를 활용합니다. 일반적으로 컨텐츠는 결코 "프레임 버퍼"에 쓰여지지 않습니다 (스크린 샷/스크린 캡처 소프트웨어 등을위한 빈 영역에 대한 끊임없는 슬픔을 유발합니다).

그래서 y, u, v 데이터에 직접 추가 할 내용을 그려야합니다. (또는 y, u, v 데이터를 RGB 데이터로 변환하고보다 일반적인 방법으로 표시하십시오.)

+0

어리석은 나를. 문서에서 해당 행을 놓쳤습니다. Upvoted 및 허용 –

0

생각 나는 구글을 사용하는 해결책을 찾지 못했기 때문에 파이 게임의 표면을 YCbCr에서 변환 한 방법을 게시 할 것입니다.

#!/usr/bin/env python 

import pygame 
import Image 
import sys 

W = 352 
H = 288 
WH = (W, H) 

pygame.init() 
screen = pygame.display.set_mode(WH) 

fd = open('foreman.yuv', 'rb') 
y = fd.read(W * H) 
u = fd.read(W * H/4) 
v = fd.read(W * H/4) 
fd.close() 

# Use PIL to get a black-n-white version of the YCbCr 
# and convert it to RGB 
im = Image.fromstring('L', WH, y) 
rgb = im.convert('RGB') 

s = pygame.image.frombuffer(rgb.tostring(), rgb.size, rgb.mode) 

screen.blit(s, (0,0)) 
pygame.display.flip() 
관련 문제