convertir a escala de grises con cinder

Estoy siguiendo un tutorial sobre Ceniza donde carga y muestra imágenes como cinder::gl::Texture objetos. Esta clase no tiene convert2Grayscale método, entonces, ¿es posible implementar algo así por mi cuenta? ¿Tengo acceso a píxeles separados? donde podría aplicar un algoritmo simple? (Acceder a los píxeles es en realidad más importante ya que quiero usar esto para otro proyecto)

preguntado el 15 de febrero de 14 a las 20:02

2 Respuestas

Cada píxel está representado por un vector 3D [R,G,B] Donde R es el valor en [0,1] del canal rojo, G es el valor en [0,1] del canal verde y B es el valor en [0,1] del canal azul. La forma más fácil de convertir un píxel RGB 3D en una Y escalar que representará la intensidad de la luz en [0,1] (es decir, escala de grises) es usar la siguiente fórmula:

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma

Donde gamma en la mayoría de los sistemas es igual a 2.2

Ahora, en lo que respecta al acceso a los píxeles de una imagen en ceniza, deberá cargar su imagen en un objeto de superficie. Los objetos de superficie en Cinder tienen funciones de interfaz para acceder a píxeles individuales. Vea este increíble tutorial sobre cómo hacerlo: http://www.creativeapplications.net/tutorials/images-in-cinder-tutorials-cinder/

Respondido 16 Feb 14, 02:02

Enfoque más simple, como se muestra en el 'Hola, Cinder' tutoriales en el sitio web de Cinder:

  1. Cargue la imagen en un objeto de Canal, que por defecto la convertirá a escala de grises a la vez.
  2. Utilice ese objeto Canal para inicializar un objeto Superficie que se puede utilizar en su draw() método, algo como:

    void MiAplicación::configuración() {

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

    }

    void TutorialApp::dibujar()

    {

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

    }

respondido 14 mar '14, 21:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.