모두. 나는 레이저 스팟 이미지의 밝기를 계산하려고 시도 했었습니다. 이미지는 원래 녹색이었고 레이저는 녹색으로 단색이었습니다. 하지만 그 사진은 그레이 스케일 이미지를 사용하여 그레이 스케일 필터를 사용하여 그림의 픽셀 값을 얻기 위해 두 개의 for-loop를 정의하려고 시도했지만 실제로 예상치 못한 것을 얻은 것 같습니다. 무슨 일이 일어나고 있는지 전혀 알지 못합니다. . 나는 나를 위해 빛을 비춰 줄 사람이 필요하다고 생각합니다.그레이 스케일 (32bbparb)의 이미지 밝기 계산
상황 : 흑백 이미지가 있습니다. 아래 알고리즘은 가장 밝은 점 즉 흰색 점을 제공하지 않았으며 대신 임의의 위치 (검은 색이나 흰색이 아님)를 가리 킵니다.
편집 : 픽셀 값을 찾기 위해 그림 위로 반복 루프를 사용합니다.
for (int i = xstart; i < xend; i++)
{
for (int j = ystart; j < yend; j++)
{
Color pixelColor = myBitmap.GetPixel(i, j);
brightness = pixelColor.GetBrightness();
//brightness = 0.2126 * pixelColor.R + 0.7152 * pixelColor.G + 0.0722 * pixelColor.B;
//brightness = 0.333 * pixelColor.R + 0.333 * pixelColor.G + (1 - 0.333 * 2) * pixelColor.B;
brightness_array[k, 0] = i;
brightness_array[k, 1] = j;
brightness_array[k, 2] = brightness;
k++;
}
}
밝기 이러한 모든 알고리즘이 가장 밝은 점에 대한 잘못된 위치를 준 찾기 위해, 나는 결과에 영향을 미치는 투명성에 대한 별도의 알파 채널을했기 때문에 그것의 궁금합니다. 전체 그림을 통해 당신 루프 후, 당신은 max_brightness을받을 것을 그래서이 최대 밝기를 발견하는 방법을 위의 코드는
는
double max_brightness = 0.0;
int positionX = 0;
int positionY = 0;
for (int m = 0; m < k; m++)
{
if (brightness_array[m, 2] > max_brightness)
{
positionX = Convert.ToInt32(brightness_array[m, 0]);
positionY = Convert.ToInt32(brightness_array[m, 1]);
max_brightness = brightness_array[m, 2];
}
}
, 나는, 픽셀 하나 하나를 스캔 max_brightness 같은 새로운 max_brightness 픽셀을 설정 .
MY 코드가 실제로 길기 때문에 여기에 게시되지 않았습니다. –
사진이 회색조 인 경우 모든 색상 구성 요소 (R, G 및 B)가 동일해야합니다. 이것은 어떤 알고리즘을 사용하든 (또는 'brightness = pixelColor.R'을 사용하더라도) 가장 밝은 픽셀이 정확하게 발견되어야 함을 의미합니다. 나는 그 문제가 다른 곳에 있다고 생각한다. – Lasooch
코드가 길어질 수 있지만 관련 부분을 포함해야합니다. 예를 들어, i와 j는 무엇입니까? 어떤면에서 잘못된 위치를 부여합니까? 어떻게 알 수 있니? – DavidG