glReadPixels에서 가져온 원시 픽셀 데이터를 JPEG 형식으로 변환하고 다시 사용할 수있는 모든 C++ 예제?OpenGL 픽셀 데이터를 jpeg
답변
ImageMagick 라이브러리를 사용하면 원시 데이터를 jpeg 이미지 데이터로 변환 할 수 있습니다. 동일한 라이브러리를 사용하여 jpeg 이미지 데이터를 원시 (RGB) 데이터로 변환 할 수 있습니다.
OpenGL에서 JPEG 이미지 처리를 지원하는지 잘 모르겠습니다. 도서관이 실제로하는 것이 아닙니다.
일단 픽셀 데이터에 액세스하면 쉽게 OpenCV을 사용하여 이미지를 JPEG (또는 다른 형식)로 쓸 수 있습니다. 여기에 의사 코드가 있습니다.
/*
* On Linux, compile with:
*
* g++ -Wall -ggdb -I. -I/usr/include/opencv -L /usr/lib -lm -lcv -lhighgui -lcvaux filename.cpp -o filename.out
*/
#include <cv.h>
#include <highgui.h>
/*
* Your image dimensions.
*/
int width;
int height;
CvSize size = cvSize(width, height);
/*
* Create 3-channel image, unsigned 8-bit per channel.
*/
IplImage *image = cvCreateImage(size, IPL_DEPTH_8U, 3);
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
unsigned int r;
unsigned int g;
unsigned int b;
/*
* Call glReadPixels, grab your RGB data.
* Keep in mind that OpenCV stores things in BGR order.
*/
CvScalar bgr = cvScalar(b, g, r);
cvSet2D(image, i, j, bgr);
}
cvSaveImage("filename.jpg", image);
cvReleaseImage(&image);
주위를 둘러 보면 JPEG를 다루기위한 다른 라이브러리도 있습니다.
나는 libjpeg일지도 모른다고 생각하고 있었다. –
예, 모든 이미징 라이브러리가 수행합니다. 이렇게하는 것이 매우 일상적인 일이므로 코드가 많이 달라 보이는지 의심 스럽습니다. – misha
libjpeg에서 메모리 압축 기능을 찾을 수 없습니다. 메모리 압축/압축 해제에 표시되는 모든 C++ 코드가 있습니까 (파일에 쓰는 것과 반대) –
외부 라이브러리를 사용하십시오.
이미지 파일 처리를 위해 스위스 군용 나이프 DevIL을 권합니다.
- 가 악마를 통해 메모리에 RGB 이미지를 만드는 방법은 파일을 저장하려면 GL 프레임 버퍼에서 읽어내는 픽셀로 악마의 이미지를 채우기 위해,
- 전화
ilSaveImage("foo.jpg")
을 - 전화
glReadPixels
필요합니다.bmp
,png
등을 사용할 수도 있습니다. 파일 이름에서 형식이 자동으로 감지됩니다.
심플.
왜이 태그에 JPEG2000 태그가 있습니까? JPEG와 JPEG2K는 완전히 다른 짐승입니다. – Goz
jpeg2k에서도이 작업을 수행 할 수 있습니까? 나는 jpeg2k를 사용한 적이 없다. 어떤 포인터? –
jpeg2k는 손실이 많은 이미지 형식입니다. "jpeg2k"에서 원하는 작업을 수행하는 것은 사용하려는 라이브러리가이를 지원한다고 가정 할 때 다른 형식과 동일합니다 (지원 라이브러리 목록은 http://en.wikipedia.org/wiki/JPEG_2000 참조) . – misha