我有一个接收用相机拍摄的帧的类。然后它将帧传递给相机计算器,根据相机计算器的宽高比设置进行处理和裁剪。
当我有......
@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);
}
完美无缺。这根本不符合逻辑。这两位代码不相同吗?
答案 0 :(得分:1)
从它的外观来看,receivePicture
和processFrameForResult
分为两个不同的类别。在顶部代码块中,您正在CameraCalculator
类中进行裁剪。分配processFrameForResult
时,问题在于Frame
方法。此行实际上并未将裁剪的Frame
分配回Frame
变量,因为一旦该方法返回,输入Mat Frame
变量就不再在范围内。有关原因的详细信息,请please see this post详细说明传递引用和传递值之间的差异。
如果您希望顶部代码块生效,那么顶部代码块中的processFrameForResult
方法必须返回Mat Frame
对象而不是void。