Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Android OpenCV调整大小失败_Android_Opencv - Fatal编程技术网

Android OpenCV调整大小失败

Android OpenCV调整大小失败,android,opencv,Android,Opencv,我有一个使用OpenCV for android的JavaCameraView的应用程序,它使用以下回调 CameraBridgeViewBase.CvCameraViewListener cvListener = new CameraBridgeViewBase.CvCameraViewListener() { @Override public void onCameraViewStarted(int width, int height) { } @Over

我有一个使用OpenCV for android的
JavaCameraView
的应用程序,它使用以下回调

CameraBridgeViewBase.CvCameraViewListener cvListener = new CameraBridgeViewBase.CvCameraViewListener() {
    @Override
    public void onCameraViewStarted(int width, int height) {

    }

    @Override
    public void onCameraViewStopped() {

    }

    @Override
    public Mat onCameraFrame(Mat inputFrame) {
        Size newSize = new Size(400, 200);
        Mat fit = new Mat(newSize, CvType.CV_8UC4);
        Imgproc.resize(inputFrame,fit,newSize);
        return fit;
    }
};
但是,当调整大小时,会出现一个错误:

E/CameraBridge: Utils.matToBitmap() throws an exception: /Volumes/Linux/builds/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
E/cv::error(): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /Volumes/Linux/builds/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp, line 97
E/org.opencv.android.Utils: nMatToBitmap catched cv::Exception: /Volumes/Linux/builds/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
E/CameraBridge: Mat type: Mat [ 244*432*CV_8UC4, isCont=true, isSubmat=false, nativeObj=0x1ade1b0, dataAddr=0x5dbc6010 ]
E/CameraBridge: Bitmap type: 240*160

在实际的UI中没有发生任何事情。我不确定为什么会看到这个错误,因为我从来没有调用
Utils.bitmapToMat
Utils.matToBitmap
。当我取出
Imgproc.resize(inputFrame、fit、newSize)时并返回
输入框
,一切正常。

对于
onCameraFrame
,我相信您必须返回与
输入框
相同大小的垫子。因为从您的相机获得的图像的分辨率是 240*160(请参阅此->
E/CameraBridge:Bitmap type:240*160
)完成处理后,您需要将垫子的大小调整为240*160

一个简单的解决方案:

@Override
public Mat onCameraFrame(Mat inputFrame) {
    Size newSize = new Size(400, 200);
    Mat fit = new Mat(newSize, CvType.CV_8UC4);
    Imgproc.resize(inputFrame,fit,newSize);

    /**Your processing code */

    Imgproc.resize(fit,fit,inputFrame.size()); <- Add this line

    return fit;
}
@覆盖
公共Mat onCameraFrame(Mat inputFrame){
大小newSize=新大小(400200);
Mat fit=新的Mat(新尺寸,CvType.CV_8UC4);
Imgproc.resize(inputFrame、fit、newSize);
/**您的处理代码*/
resize(fit,fit,inputFrame.size());