У меня есть следующее изображение
Я хотел преобразовать его в изображение в градациях серого со следующим кодом.
class Pixel {
private:
double c[4];
public:
double Luminance(void) const {
// Return luminance
return 0.30 * c[0] + 0.59 * c[1] + 0.11 * c[2];
}
void SetRed(double red) {
// Set red component
c[0] = red;
}
void SetGreen(double green) {
// Set green component
c[1] = green;
}
void SetBlue(double blue) {
c[2] = blue;
}
void SetAlpha(double alpha) {
// Set alpha component
c[3] = alpha;
}
};
class Image {
private:
R2Pixel *pixels;
int npixels;
int width;
int height;
public:
void BlackAndWhite(void) {
// Replace each pixel with its luminance value
// Put this in each channel, so the result is grayscale
for (int i = 0; i < this->npixels; i++) {
auto luminance = pixels[i].Luminance();
pixels[i].SetRed(luminance);
pixels[i].SetGreen(luminance);
pixels[i].SetRed(luminance);
}
}
};
В обоих классах есть больше методов, которые я не использовал для краткости.Основными методами интересов являются Pixel :: Luminance () и Image :: BlackAndWhite ().Как рассчитывается Luminace (), я ожидал, что результат будет в градациях серого изображения.Это не тот случай, хотя.На самом деле, даже если я установлю значение каждого из каналов Red, Green и Blue на 1, изображение не станет полностью белым.Вместо этого это выглядит как-то ниже
Я не уверен, что мне здесь не хватает.Любые указатели будут оценены.Кроме того, дайте мне знать, если кто-то думает, что для понимания вопроса требуется добавление дополнительного кода.
Спасибо.