Java Android,OpenCv:函数中出现裁剪时裁剪失败
我有一个类,它接收用相机拍摄的帧。然后,它将帧传递给摄影机计算器,该计算器根据摄影机计算器的纵横比设置进行一些处理和裁剪 当我有Java Android,OpenCv:函数中出现裁剪时裁剪失败,java,android,opencv,android-camera,Java,Android,Opencv,Android Camera,我有一个类,它接收用相机拍摄的帧。然后,它将帧传递给摄影机计算器,该计算器根据摄影机计算器的纵横比设置进行一些处理和裁剪 当我有 @Override public void receivePicture(Mat frame) { mCameraCalculator.processFrameForResult(frame); //the image is then saved } //in camera calculator... public void processFr
@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);
}
裁剪失败—保存的图像未被裁剪。然而,当我有
@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);
}
它工作得很好。这是没有道理的。这两位代码不相等吗 从外观上看,receivePicture和processFrameForResult属于两个不同的类。在顶部代码块中,您正在CameraCalculator类中执行裁剪。问题在于指定帧时processFrameForResult方法。这一行实际上并没有将裁剪的帧分配回帧变量,因为一旦方法返回,输入Mat帧变量它就不再在范围内。有关原因的更多详细信息,请参阅按引用传递和按值传递之间的差异
如果希望顶部代码块工作,则顶部代码块中的processFrameForResult方法必须返回Mat Frame对象,而不是void