Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android,OpenCv:函数中出现裁剪时裁剪失败_Java_Android_Opencv_Android Camera - Fatal编程技术网

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