使用OpenCV矩阵表示OpenGL ES纹理

时间:2014-08-05 10:51:09

标签: android opencv opengl-es android-ndk

我正在尝试编写一个AR应用程序,到目前为止我已经使用opencv进行图像变形和事情,但是逐个变形视频帧在计算上是昂贵的。因此,我正在尝试迁移到opengl进行扩充。

到目前为止,我试图获取相机帧数据,将其转换为java部分中的opencv矩阵,然后在本机代码中从中创建纹理。它有点工作,但结果中有一些奇怪的标记: enter image description here

正如@Micka建议的那样,这是我的代码片段:

java部分:

public void onPreviewFrame(byte[] frame, Camera arg1) {
    mFrame.put(0, 0, frame);
    processFrame(mFrame.getNativeObjAddr());
}

原生部分:

JNIEXPORT void JNICALL Java_com_..._CameraPreviewer_processFrame( JNIEnv* env, jobject thiz, jlong addr)
    cv::Mat& mFrame = *(cv::Mat*)addr;
    cv::cvtColor(mFrame, buffer[(bI) % 30], cv::COLOR_YUV2BGR_NV21);
}

和onDrawFrame渲染器(原生):

{
    ...
    cvtColor(buffer[(bI) % 30], frame, CV_BGR2BGR565);
    glTexSubImage2D(GL_TEXTURE_2D, 0, (1024-frameWidth)/2, (1024-frameHeight)/2, frameWidth, frameHeight, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, frame.ptr());
    ...
}

0 个答案:

没有答案