2014-02-15 132 views
1

我正在關注Cinder的教程,您在其中加載和顯示圖像爲cinder::gl::Texture對象。這個班沒有convert2Grayscale方法,所以 是否可以自己實現這樣的東西? 我可以訪問分離像素哪裏可以申請a simple algorithm? (訪問像素實際上更重要,因爲我想將其用於另一個項目)用灰塵轉換爲灰度

回答

2

每個像素都由3D矢量[R,G,B]表示 其中R是[0,1]中的值紅色通道,G是綠色通道[0,1]中的值,B是藍色通道[0,1]中的值。將3D RGB像素變成標量Y的最簡單的方法是用[0,1](即灰度)表示光強度,即使用以下公式:

Y = .2126 * R^gamma + 0.7152 * G ^伽馬+ 0.0722 * B ^伽馬

凡伽馬在大多數系統等於2.2

現在只要是涉及訪問煤渣中的圖像的像素,你將不得不將圖像加載到Surface對象上。 cinder中的表面對象具有訪問各個像素的接口函數。查看該怎麼辦呢這個驚人的教程:http://www.creativeapplications.net/tutorials/images-in-cinder-tutorials-cinder/

1

更簡單的方法,如煤渣網站上的「Hello, Cinder」教程圖所示:

  1. 加載鏡像到一個通道對象,這將是默認轉換它一次灰度全部。
  2. 使用該通道對象初始化,可以在您draw()方法中使用的表面對象,像:

    無效MyApp的::設置(){

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

    }

    無效TutorialApp :: draw()

    {

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

    }