@gth-other

Как при помощи Magick++ загрузить JPG изображение в градациях серого?

Перерыл весь гугл, прочитал официальную документацию, но так и не нашел как прочитать изображение в градациях серого (grayscale). Нужно получить массив пикселей размером xy, где x и y - ширина и высота.

P.S. Пример изображения (надеюсь, хабр его не переконвертирует)
6235bd719736e591409796.jpeg
P.S.2 Если загружать изображение тем же кодом, что и загружаются и обычные RGB изображения, то на всех пикселях на всех трех цветах возвращаются нули.
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@gth-other Автор вопроса
Разобрался. Решение может и не самое оптимальное, но работает. Для всех, кто (возможно) придет сюда из гугла:
std::vector<float> load_jpg(const std::string& file_location) {
    Magick::Image image;
    image.read( file_location);
    image.type(Magick::TrueColorType);
    image.colorspaceType(Magick::sRGBColorspace);
    size_t width = image.baseColumns();
    size_t height = image.baseRows();
    std::vector<float> vector(width * height);
    Magick::ColorRGB colour;
    for (size_t row = 0; row < height; row = row + 1) {
        for (size_t column = 0; column < width; column = column + 1) {
            colour = image.pixelColor(row, column);
            vector[row * width + column] = (float)(0.2126 * colour.red() + 0.7152 * colour.green() + 0.0722 * colour.blue());
        }
    }
    return vector;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы