2012-03-13 8 views
1

次のコードを使用して、IplImageからテクスチャを作成して表示しています。それは時間の半分で動作しますが、イメージを歪ませることがあります。テクスチャのパディングと関係があると思いますが、修正が必要です。OpenGLのOpenCVイメージ:奇妙な動作

int loadTexture_Ipl(IplImage *image, GLuint *text) { 
    if (image==NULL) return -1; 
    glGenTextures(1, text); 
    glBindTexture(GL_TEXTURE_2D, *text); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height,0, GL_BGR, GL_UNSIGNED_BYTE, image->imageData); 
    return 0; 
} 

このリンクは、誰でも同様の問題が発生している場合の出力のスクリーンショットです。ここ

Skew problem

+0

'glBegin/End()'ルーチンはどうですか? – karlphillip

答えて

5

あなたの問題は、メモリ内のあなたのIplImageの1行が(これはパフォーマンス上の理由によるものである)、実際に使用される画像よりも広いかもしれないという事実です。 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);を使用して正しい軌道に乗っています - 値が間違っているだけです。

単純な例として、画像の幅が3ピクセルであるとします。したがって、1行(RGB)は基本的に9バイト(バイトアラインメント、行間のスペースなし)、10バイト(バイトアライメント、行間の1バイトスペース)、12バイト(ワードアラインメント、行間3バイトスペース) (ダブルワードアライメント;行間7バイトのスペース)。

現時点で見ることはできませんが、IplImageの行はデフォルトでワード境界で整列されていると思います。 RGBを使用しているため(1ピクセルあたり3バイトで、4バイトではありません)、これが問題です。他の値を試してみてください。単語の整列が必要です(glPixelStorei(GL_UNPACK_ALIGNMENT, 4);)。

+0

それはトリックをしたようだ!迅速な対応に感謝します! – Awalias