C ++端Mat Rgb的行和列错误,而不是Java端setMaxFrameSize()中设置的行和列错误

时间:2019-04-01 09:41:57

标签: android c++ opencv

C ++中的mat rgb接收到的行和列比使用mOpenCvCameraView.setMaxFrameSize(1920,1080)在Java端设置的行和列错误; 我在C ++端看到1080行和1080 cols。我正在C ++中创建一个函数,该函数读取框架,进行一些工作并将更改发送到Java,但是Rgb值错误,因此该函数中的计算产生错误的结果。 Opencv android sdk版本:3.4.3,Android Studio版本:3.3.2和NDK版本:19.0.5232133。

当我将分辨率更改为640x480时,Mat rbg(在C ++函数中)将获得正确的行和列,即640、480。setMaxFrameSize()中设置的640x480以上的任何分辨率;给出错误的Mat。

Java方面:

public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{
 private CameraBridgeViewBase   mOpenCvCameraView;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mOpenCvCameraView.setMaxFrameSize(1920, 1080);
        mOpenCvCameraView.setCvCameraViewListener(this);
    } 
void BW(View view){
BW(mRgba.getNativeObjAddr());
}
public native void BW(long matAddrRgba);
}

C ++方面:

JNIEXPORT void JNICALL
Java_com_example_ABC_MainActivity_BW(JNIEnv *, jobject, jlong addrRgba) {

    Mat &matRgb = *(Mat *) addrRgba;
     __android_log_print(ANDROID_LOG_ERROR, "Native", "Frame size: %d, %d", matRgb.rows, matRgb.cols);
//in Logcat it prints "Frame size: 1080, 1080", which obviously is wrong
//For the resolution 1280, 720, it prints "Frame size: 720, 960"
}

为什么会发生这种情况,我该如何解决?我想在C ++中接收与setMaxFrameSize()中设置的值相同的Mat值,否则,我将不得不重新校准相机。

0 个答案:

没有答案