android - OpenCV Android - 匹配模板错误

标签 android opencv image-processing

我在这里看到了一些与我的错误相关的问题,例如 thisthis我知道如果图像和模板没有相同的数据类型,我无法执行 Imgproc.matchTemplate() 方法。但我仍然对如何知道我正在使用什么类型的 Mat 感到困惑。

下面是我从示例 here 改编而来的代码:

for (int i = 0; i < 24; i++) {
    arrDraw[i] = getResources().getIdentifier("let" + i, "drawable", getPackageName());
}

Mat mImage = input.submat(bigRect);
for (int i = 0; i < 24; i++) {
    Mat mTemplate = Utils.loadResource(this, arrDraw[i], Highgui.CV_LOAD_IMAGE_COLOR);
    Mat mResult = new Mat(mImage.rows(), mImage.cols(), CvType.CV_32FC1);
    Imgproc.matchTemplate(mImage, mTemplate, mResult, match_method);
    Core.normalize(mResult, mResult, 0, 1, Core.NORM_MINMAX, -1, new Mat());
    ... // further process
}

所以基本上我想做的是从 inputFrame 的 submat 中获取 mImage 并将模板过程与其他 24 张图片进行匹配,并确定哪一个具有最佳值(value)(最低或最高)。然而错误表明了这一点。

OpenCV Error: Assertion failed ((img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.type()) in void cv::matchTemplate(cv::InputArray, cv::InputArray, cv::OutputArray, int), file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/templmatch.cpp, line 249

我尝试首先使用相同的类型初始化mImagemTemplate,但仍然没有成功。有什么建议吗?先谢谢了。

最佳答案

错误告诉您图像和模板具有不同的类型。

Assertion failed  ... img.type() == templ.type() ....

我愿意打赌(少量)mTemplate 是订购的 CV_8UC3 BGR。

从您发布的代码中,无法判断 mImage 的类型是什么,尽管如果它是从相机帧中提取的,并且如果您执行了以下操作:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
     Mat inputFrame = inputFrame.rgba();
     ....
}

那么它很可能是 CV_8UC4 BGRA 订购的。这不是同一类型。

另外,我不确定 submat() 的行为是 3D 还是 4D 输入矩阵,我认为它设计为仅在 2D 矩阵上操作,因此您可能会发现它返回 2D 矩阵 (CV_8UC2)或者一些未定义的怪异。

我建议您尝试在 matchTemplate( ... )< 之前转储 type()depth() 或图像和模板 调用。

关于android - OpenCV Android - 匹配模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181134/

相关文章:

android - OpenCV Manager(在 google play 中找不到)+ 很难在 Oreo 中安装

opencv - HomographyBasedEstimator 和 findHomography OpenCV 之间的区别

android - 在 Android 中使用外部数据库

python - 如何在我的ros系统中添加sensor_msgs.msg类型?

android - 限制在 Google Play 上下载应用程序的访问权限

opencv - .Net 中的阿拉伯语 OCR

java - src.type() == CV_8UC1 断言在校正图像时失败

ios - 如何在 iOS 中裁剪进入圆圈内的图像

Android Studio Gradle 代理设置

android - PhoneGap AdMob 插件中 undefined variable admob