2012-02-06 2 views
0

저는 Visual Studio 2010, C++을 사용하고 있습니다.Devil을 사용하여 이미지에서 검색된 픽셀 데이터 사용

내가 뭘하려는 건로드 된 이미지에서 픽셀 데이터 (특히 RGB 색상)를 검색 한 다음 다양한 검사에서이를 사용하는 것입니다. 현재 모든 데이터를 반복하여 픽셀이 특정 색상 (특정 R, G 및 B 값) 인 경우를 감지 할 수 있습니다.

나는 Devil을 사용하고 있으며, Devil을 계속 사용하기를 원한다. (나는 이미지 처리에 도움이되는 다른 툴들과 관련된 많은 제안들을 보았다.)

바로 지금 Devils 함수 ilgetData()는 모든 픽셀의 RGB 값이 모두 단일 바이트 배열에있는 포인터를 검색합니다. 이 함수를 사용하여 얻은 데이터를 저장 한 다음 for 루프에서 사용하는 방법을 알지 못합니다.

예제 코드는 대단히 감사하겠습니다.

답변

5

ilGetData() 반환 값을 저장하는 올바른 방법은 IL 부호없는 바이트 배열입니다. 당신은 사용

for(int i = 0; i < size; i++) 
    { 
    // Print out each ILubyte one at time 
    printf("%d\n", bytes[ i ]); 
    } 

은 당신이 아마 원하는 것은 루프에 대한 예를 들어

ILubyte * bytes = ilGetData(); 

가 for 루프에서 반복하는 것입니다 인쇄 또는 주어진에서 RGB 값으로 다른 작업을 수행 이미지의 모든 픽셀에 대해 픽셀입니다. Bart가 지적한 바는 아래의 순서는 IL_RGBA 또는 RGBA 형식입니다. IL_RGB를 사용하면 4가 3이되고, IL_BGR 또는 IL_BGRA를 사용하면 빨간색과 파란색 값을 예상대로 전환해야합니다.

ILuint width,height; 
width = ilGetInteger(IL_IMAGE_WIDTH); 
height = ilGetInteger(IL_IMAGE_HEIGHT); 

for (int i = 0; i < height; i++) 
{ 
    for (int j = 0; j < width; j++) 
    { 
     printf("%s\n", "Red Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 0]); 
     printf("%s\n", "Green Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 1]); 
     printf("%s\n", "Blue Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 2]); 
    } 
} 
+0

예를 들어 RGBA를 형식으로 가정합니다. – Bart

+0

고맙습니다. 당신은 저를 찾는 주를 거의 다 풀었습니다. 코드 예제는 대단히 감사하겠습니다. 다시 한번 감사드립니다. – Rohit