преобразовать в оттенки серого с помощью золы

Я следую учебнику по окалина где вы загружаете и отображаете изображения как cinder::gl::Texture объекты. Этот класс не имеет convert2Grayscale метод, так
возможно ли реализовать что-то подобное самостоятельно? Есть ли у меня доступ к отдельным пикселям где я мог бы подать заявку простой алгоритм? (Доступ к пикселям на самом деле важнее, так как я хочу использовать это для другого проекта)

1

Решение

Каждый пиксель представлен трехмерным вектором [R, G, B] Где R — значение в [0,1] красного канала, G — значение в [0,1] зеленого канала, а B — значение в [0,1] синего канала. Самый простой способ превратить трехмерный пиксель RGB в скаляр Y, который будет представлять интенсивность света в [0,1] (то есть в оттенках серого), это использовать следующую формулу:

Y = .2126 * R ^ гамма + .7152 * G ^ гамма + .0722 * B ^ гамма

Где гамма в большинстве систем равна 2,2

Теперь, когда речь идет о доступе к пикселям изображения в cinder, вам придется загрузить свое изображение на объект Surface. Поверхностные объекты в cinder имеют интерфейсные функции для доступа к отдельным пикселям. Посмотрите этот удивительный урок о том, как это сделать: http://www.creativeapplications.net/tutorials/images-in-cinder-tutorials-cinder/

2

Другие решения

Более простой подход, как показано вПривет, Синдеручебники на сайте Cinder:

  1. Загрузите изображение в объект Channel, который по умолчанию преобразует его в оттенки серого одновременно.
  2. Используйте этот объект Channel для инициализации объекта Surface, который можно использовать в вашем draw() метод, что-то вроде:

    void MyApp :: setup ()
    {

    Url url( "http://libcinder.org/media/tutorial/paris.jpg" );
    
    mChannel = Channel32f( loadImage( loadUrl( url ) ) );
    mTexture = mChannel;
    mDrawImage = true;
    

    }

    void TutorialApp :: draw ()

    {

    gl::clear( Color( 0, 0, 0 ), true );
    
    if( mDrawImage )
    {
    mTexture.enableAndBind();
    gl::draw( mTexture, getWindowBounds() );
    }
    

    }

1

По вопросам рекламы [email protected]