2016-07-28 3 views
0

V4L2를 통해 장치에서 이미지를 읽습니다. 이미지는 YUV 4 : 2 : 2 형식, 일명 V4L2_PIX_FMT_YUYV, 일명 YUY2입니다.Magick ++를 사용하여 YUYV를 RGB로 변환하는 방법?

내가 뭘하고 싶은데요 RGB로 바이트, 또는 더 나은 방법을 Magick ++ 이미지 개체를 인스턴스화하고 RGB24 대신 YUYV 있음을 알리는 중 변환 할 것입니다.

쉽게 할 수 있습니까? Magick ++ 설명서는 기본 기능이며 도움이되지 않습니다. http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html

답변

2

YUV422RGB888으로 쉽게 변환 할 수 있습니다. yuv2rgb에 대해 다음 공식을 사용하여

rgb[0] = yuv2rgb(y1, u, v); 
rgb[1] = yuv2rgb(y2, u, v); 
... 
... 

: 다음

u = data[0]; 
y1 = data[1]; 
v = data[2]; 
y2 = data[3]; 
... 
... 

과 :

R = Y + 1.140*V 
G = Y - 0.395*U - 0.581*V 
B = Y + 2.032*U 
1

DimChtz의 대답은 쉬운 것 data 당신이 YUV422 다음 형식으로로드 이미지 데이터하자 임무는 직설적이다.

ImageMagick이가 ... 형식

 UYVY* rw- 16bit/pixel interleaved YUV 
     YUV* rw- CCIR 601 4:1:1 or 4:2:2 

그리고 일 등으로 활용할 수있는 지원합니다

// Quickly reorder YUYV to UYVY 
unsigned char y1, u, y2, v; 
for (int i = 0; i < buffer_length; i+=4) { 
    y1 = buffer[i ]; 
    u = buffer[i+1]; 
    y2 = buffer[i+2]; 
    v = buffer[i+3]; 
    buffer[i ] = u; 
    buffer[i+1] = y1; 
    buffer[i+2] = v; 
    buffer[i+3] = y2; 
} 
Magick::Image image; 
Magick::Blob blob(buffer, buffer_length); 
image.size("176x144"); 
image.magick("UYVY"); 
image.read(blob); 
// ... etc ... 

내가 ImageMagick과의 ImageMagick Program Interfaces 보드에 이상 점프 제안 및 기능 요청을 발행 할 것이며,/또는 안내를 구하십시오.

+0

굉장한 답변입니다. "ImageMagick이 형식을 지원합니까?"다음에 어떻게 2 줄의 텍스트를 얻었습니까? 도구의 출력 부분입니까? –

+0

예. 그것은 IM의 식별 유틸리티에서 왔습니다. 'identify -list format' – emcconville

+0

흠. 최신 버전이어야합니다. 나는 magick ++ 6.q16-5 데비안 (ARM7 장치)에 있는데 이것은 존재하지 않는다 : $ identify -list format -bash : identify : command not –