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值,否则,我将不得不重新校准相机。