Android,OpenCv:裁剪在函数

时间:2018-01-08 22:53:57

标签: java android opencv android-camera

我有一个接收用相机拍摄的帧的类。然后它将帧传递给相机计算器,根据相机计算器的宽高比设置进行处理和裁剪。

当我有......

@Override
public void receivePicture(Mat frame) {
    mCameraCalculator.processFrameForResult(frame);
    //the image is then saved   
}

//in camera calculator...
public void processFrameForResult(Mat frame){
    processFrame(frame);
    frame = frame.submat(getCenterByAspectRatio(frame)); //crop
}

裁剪失败(未裁剪保存的图像)。但是,当我有...时

@Override
public void receivePicture(Mat frame) {
    mCameraCalculator.processFrameForResult(frame);
    frame = frame.submat(mCameraCalculator.getCenterByAspectRatio(frame)); //crop
    //the image is then saved   
}

//in camera calculator...
public void processFrameForResult(Mat frame){
    processFrame(frame);
}

完美无缺。这根本不符合逻辑。这两位代码不相同吗?

1 个答案:

答案 0 :(得分:1)

从它的外观来看,receivePictureprocessFrameForResult分为两个不同的类别。在顶部代码块中,您正在CameraCalculator类中进行裁剪。分配processFrameForResult时,问题在于Frame方法。此行实际上并未将裁剪的Frame分配回Frame变量,因为一旦该方法返回,输入Mat Frame变量就不再在范围内。有关原因的详细信息,请please see this post详细说明传递引用和传递值之间的差异。

如果您希望顶部代码块生效,那么顶部代码块中的processFrameForResult方法必须返回Mat Frame对象而不是void。