문제

우후, 이제 배열에 왔습니다. 하느님 감사합니다.

이제 2개의 배열이 생겼습니다!

int colorvalues[][]  = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}};

4x4픽셀 그림이라고 상상해 보세요.

이제 0부터 255까지의 색상 값 분포인 히스토그램을 만들고 싶습니다.예를 들어 여기에는 2*255, 2*127, 5*34 등이 있습니다.

그래서 저는 int histogram[] = new int [255];

내 색상 값이 올바른지 테스트하기 위해 다음과 같이 썼습니다.

 for(int i=0; i < colorvalues.length; i++){
     for (int j = 0; j < colorvalues.length; j++){
         System.out.println("Colorvalue in Array " + i + "." + j + " is" + colorvalues[i][j]);
     }
 }

여태까지는 그런대로 잘됐다.이제 0부터 255까지의 histogram[255]에 들어가 colorvalues[][]의 값과 비교하는 프로시저를 어떻게 작성합니까? 예를 들어 histogram[34]가 colorvalues[][]와 비교되는 경우 히스토그램에 5를 추가합니다[34].colorvalues[][]에는 5 곱하기 34가 있기 때문입니다.

어쩌면 내 생각이 틀렸을 수도 있고 0에서 255까지의 색상 값에 대해 히스토그램[255][], 255를 갖고 다른 하나는 카운터에 사용하도록 되어 있었습니다.그럼에도 불구하고 나는 그것을 어떻게 깨닫는가?

도움이 되었습니까?

해결책

실제로 히스토그램을 반복해서는 안 되며 가능한 모든 값에 대해 이미지를 반복하면 안 됩니다.이미지를 반복하는 것만으로도 충분합니다.

for(int i=0; i < colorvalues.length; i++){
     for (int j = 0; j < colorvalues.length; j++){
             histogram[colorvalues[i][j]]++;
     }
}

간단히 이미지의 밝기 값을 다음과 같이 사용할 수 있습니다. 색인 히스토그램 배열에 넣습니다.

그리고 단지 카운터를 저장하기 위해 배열의 배열을 만들 필요가 없습니다.배열은 특정 값에 대한 "셀" 목록에 지나지 않는다는 점을 기억하십시오.안 int[] 정수 값을 보유할 수 있는 "셀"의 범위일 뿐입니다.그게 당신의 계산입니다.그만큼 색인 해당 셀 목록에 히스토그램의 밝기 값이 있습니다.모든 배열에는 다음 두 가지 정보가 있습니다.셀의 인덱스와 해당 셀의 값입니다.두 가지를 모두 사용하는 방법을 알아내면 됩니다.

그리고 속도 주석에 메모를 작성하면 코드가 실제로 해당 배열 경계 외부의 값에 액세스하려고 시도하지 않는지 확인할 수 있습니다.

if (colorvalues[i][j] >= 0 && colorvalues[i][j] <= 255) {
    histogram[colorvalues[i][j]]++;
}

색상 값이 다음과 같기 때문에 필요합니다. int즉, -2147483648에서 2147483647까지의 값을 보유할 수 있습니다.이는 히스토그램이 수용할 수 있는 것보다 훨씬 더 큰 범위입니다.따라서 예를 들어 색상 값이 3456인 경우 다음과 같은 이유로 프로그램이 루프에서 중지됩니다. ArrayIndexOutOfBoundsException.코드가 다음 값에 액세스하려고 시도했기 때문입니다. histogram 사용 가능한 최대 인덱스인 255를 훨씬 넘는 인덱스 3456을 가진 배열입니다.

예상 시간: 귀하의 히스토그램에 관해서는 int[255]:제가 그 점을 완전히 간과하고 있었습니다. 죄송합니다.Java에서 새 배열을 생성할 때 다음을 지정합니다. 길이, 최대 인덱스가 아닙니다.따라서 여기서 사용하는 것은 배열에서 사용할 수 있는 최대 인덱스보다 정확히 1만큼 더 큽니다.그래서 new int[256] 0부터 255까지의 인덱스를 갖는 배열입니다.

다른 팁

지도 키가 색상 값이고 지도 값이 개수인 TreeMap에 히스토그램 값을 추가하고 싶은 유혹을 받습니다.

지도의 크기는 자동으로 증가하며 색인이 범위를 벗어나는 등의 문제는 없습니다.자동으로 크기순으로 정렬됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top