2016-11-20 17 views
0

C++を使用してAndroid上でOpenCVとGLES20を使っていくつかの基本操作を開始しようとしています。OpenCVでglReadPixelsの画像を処理し、テクスチャとして返す

CameraGLSurfaceViewとそのコールバックonCameraTexture(...)を使用して、自分のネイティブライブラリに渡します。

コールがうまく流れていて、フレームバッファをベクトルに読み込んでテクスチャに渡すことができ、期待通りに機能します。

しかし、ピクセルで作業しようとすると、イメージが壊れてしまいます。

broken immage

私のC++コード:

cv::Mat in(w,h,CV_8UC4); 
    cv::Mat out(w,h,CV_8UC4); 

    glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, in.data); 

    // following operations break image >> 
    cv::cvtColor(in, out, CV_RGBA2BGRA); 
    cv::flip(out, in, 0); 
    cv::cvtColor(in, out, CV_BGRA2RGBA); 
    // << prev operations break image 

    glBindTexture(GL_TEXTURE_2D, (GLuint) tex2); 

    glTexImage2D(GL_TEXTURE_2D, 
       0, 
       GL_RGBA, 
       w, 
       h, 
       0, 
       GL_RGBA, 
       GL_UNSIGNED_BYTE, 
       out.ptr()); 

    glBindTexture(GL_TEXTURE_2D, 0); 

    in.release(); 
    out.release(); 

署名操作の絵なしテクスチャに行くとうまく表示されています。

私は間違いがOpenGLとOpenCVの間でフォーマットを変換していることを理解します。

形式を正しく変換するにはどうすればよいですか?

答えて

0

それはマットのサイズと私のミスです:中

CV ::マットCVべきである::マットに(時間、CV_8UC4、ワット)(時間ワット、CV_8UC4)

関連する問題