gpt4 book ai didi

android - OpenCV 调整大小失败

转载 作者:太空宇宙 更新时间:2023-11-03 22:10:47 25 4
gpt4 key购买 nike

我有一个使用来自 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.bitmapToMatUtils.matToBitmap。当我取出 Imgproc.resize(inputFrame,fit,newSize); 并返回 inputFrame 时,一切都按预期工作。

最佳答案

对于 onCameraFrame,我相信您必须返回与您的 inputFrame 大小相同的垫子。由于从您的相机获得的图像的分辨率是240*160(引用这个-> E/CameraBridge: Bitmap type: 240*160)你需要调整你的 Mat fit 回到 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;
}

要更改从相机接收到的图像的大小,您必须调用 mOpenCvCameraView.setMaxFrameSize(width, height); 但分辨率将从相机支持的分辨率列表中选择硬件。要了解为什么不能为分辨率设置任意值的更多信息,您需要阅读 Android Camera API,因为这就是 OpenCV 用来在后面抓取图像的方法:)

关于android - OpenCV 调整大小失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com