2012-10-07 3 views
0

OpenGL에서 색상 변환을 수행하는 방법이 있습니까 (예 : RGB에서 YUV420p 앞뒤로)? 백 버퍼의 내용, 텍스처 또는 FBO를 사용할 수 있습니다. 이 질문은 여기에서 보았지만 OpenGL 1.1로 제한되어 있으며 OpenGL의 특정 버전에는 제한되지 않습니다. OpenGL Colorspace ConversionOpenGL의 색상 공간 변환

최신 버전에서는 더 빠르고 새로운 방법이 있는지 궁금합니다. 하드웨어와 관련된 사항을 사용하지 않기를 원하지만 필요한 경우 NVIDIA GPU로 작업하고 있습니다.

+1

(코드는 GPL2 +)입니다. [이 답변] (http://stackoverflow.com/questions/9234724/how-to-change-hue-of-a-texture-with-glsl/9234854#9234854)는 YIQ로 변환하는 예제를 제공합니다. Y'CbCr은 비슷하지만 약간 다른 행렬이 있습니다. – user1118321

+0

감사합니다. 나는 그것을 일반적인 일로하고 그것을하기위한 라이브러리를 갖기를 바랬지 만 이것은 분명히 효과적입니다. 그건 분명히 저에게 RGB-> YUV444를 줄 것입니다. YUV420p의 다운 샘플링 된 크로마 채널은 어떻게 처리합니까? 이는 4 픽셀 당 하나의 샘플입니다. 귀하의 코드에서 나는 뭔가 다른 것을해야 할 것이라고 생각합니다. float I = dot (color, kRGBToI); float Q = 점 (color, kRGBToQ); – cloudraven

+1

저는 어떤 라이브러리도 모르지만 4 : 2 : 0으로 내려 가기 위해 일종의 리샘플링을 할 수 있습니다. Cb/Cr 채널의 상자 흐림이 내 첫 시도이지만, 가우스 또는 Lanczos와 같은 다른 리샘플링 필터는 아마도 더 높은 품질 일 것입니다. – user1118321

답변

1

당신이 더 새롭고 더 빠른 것을 원하신다면, 그렇습니다. CUDA 또는 OpenCL을 사용해보십시오. 그들이 쉐이더보다 훨씬 더 빠를 지 ... 나는 모른다. 우리에게 알려줘. 어떤 것이 든, 그것은 당신에게 자원이 작업에 할당되는 방법에 대한 더 많은 제어를 제공합니다.

두 프레임 워크 모두 OpenGL과 메모리를 공유 할 수 있으므로 커널을 작성하고 OpenGL 텍스처/fbo를 전달할 수 있어야합니다.

내가 xpra에 대한 이러한 모듈의 숫자를 쓴 일이, 당신은 여기에 대한 링크를 찾을 수 있습니다 xpra wiki: CSC 당신은 ARB_FRAGMENT 프로그램 대신 GLSL 쉐이더를 사용할 수 있습니다

+0

이것은 매우 유용합니다. 좀 더 긴급한 문제를 먼저 해결해야하기 때문에이 방법을 사용해 볼 수있는 기회가 생기기까지는 다소 시간이 걸릴 것입니다. 그러나 결과를 게시하기 위해 돌아올 것입니다. – cloudraven