2011-01-16 4 views
1

내 목표는 웹캠 이미지에서 텍스처를 만드는 것입니다. OpenCV의 새로운 VideoCapture 인터페이스를 통해 Logitech QuickCam 노트북 웹캠을 통해 이미지를 얻습니다. 문제는이 방법으로 비 연속체 데이터를 얻게된다는 것입니다. 즉, 이미지 데이터를 보유하는 행렬의 각 행 끝에 틈이 있음을 의미합니다.비 연속 데이터에서 OpenGL 텍스처를 생성하는 방법은 무엇입니까?

내 이미지 데이터의 레이아웃은 다음과 같습니다 :

width = frame.cols * frame.elemSize(); // 640 * 3 = 1920 byte 
step = frame.step[0]; // 2560 byte 
gap = step - width; // 640 byte 

는 그러나, 나는 질감을로드 할 때 모든 행의 마지막 640 바이트를 건너 OpenGL을 말할 수있는 방법을 찾지 못했습니다. 그 일을하는 방법이 있는지 궁금합니다. 어쨌든 텍스처로 데이터를로드하는 경우 이미지가 올바르게 표시되지 않습니다 (놀랄 일이 아닙니다). http://picasaweb.google.com/103165673068768416583/Opencv#5562843683120979026

가장 좋은 해결책은 처음부터 continuos 데이터를 얻는 것이지만 다시 (OpenCV를 사용하여)이를 수행하는 방법을 찾을 수 없습니다. 연속체 행렬에 데이터를 복사하면 올바르게 표시됩니다 (http://picasaweb.google.com/103165673068768416583/Opencv#5562843692435711522 참조).

그러나 내가해야 할 일이 없으면 데이터를 복사하고 싶지 않습니다. 어떤 아이디어?

답변

1

GL_UNPACK_ALIGNMENTGL_UNPACK_ROW_LENGTH의 조합을 시도해 볼 수 있습니다. 특정 경우

,이 줄 것이다 :

glPixelStorei(GL_UNPACK_ALIGNMENT, 4)   // as 2560 is a multiple of 4 
glPixelStorei(GL_UNPACK_ROW_LENGTH, 2560/3) // to consider each row having this number of pixels 

그러나 모두 모두, 각 픽셀은 3 바이트가 있는지 확인입니까?

나는 당신의 step는 각 픽셀의 배수가 정렬을 할 수있는 패딩 바이트가 있다면 나는 놀라지 않을 것이다 frame.cols * 4입니다 것으로 나타났습니다 4.

당신이 OpenGL을 지시 시도했다고 소스 데이터 GL_RGBA 또는 GL_BGRA이고 텍스처 내부 형식은 GL_RGB로 유지합니까?

+0

와우,이게 실제로 작동합니다! 고마워, 친구! 나는 또한 BGRA를 소스 형식으로 시도했지만 출력이 여전히 잘못되었다. (http://picasaweb.google.com/103165673068768416583/Opencv#5562907830518954274 참조) frame.elemSize() = 3이기 때문에 기대했다. – binford

+0

다행히 도울 수있다. 이상한 이미지 형식. 텍스처를 업로드 한 후에 ROW_LENGTH를 0으로 재설정하는 것을 잊지 마십시오. 그러면 다음과 같이 물릴 것입니다 : P – rotoglup

관련 문제