猿问

在 Android 中与 OpenCV 进行模板匹配时断言失败错误

我编写了一个OpenCV模板匹配类,Netbeans并且在JVM.


只是我想把它变成android应用程序。但我以前对 Android 编程不感兴趣。所以我阅读了教程并决定IntentService看起来对我的目标很好。因为我不希望任何 UI 只处理图像并获取结果图像。


我终于导入OpenCV了我的简单 Android 项目。Template Matching在Android中运行良好JVM但在Android中出现错误。只是我更改了 Android 的图像文件路径形式。并在JVM.


- 编辑 -


我将图像文件复制到 Android 虚拟设备下载文件夹。我用虚拟设备测试它。


让我分享我的代码和结果;


MyService.java (Android 工作室)


import android.content.Intent;

import android.app.IntentService;

import org.opencv.core.Core;

import org.opencv.core.Core.MinMaxLocResult;

import org.opencv.core.CvType;

import org.opencv.core.Mat;

import org.opencv.core.Point;

import org.opencv.core.Scalar;

import org.opencv.imgcodecs.Imgcodecs;

import org.opencv.imgproc.Imgproc;



public class MyService extends IntentService {


    public MyService() {

        super("MyService");

    }


    @Override

    protected void onHandleIntent(Intent workIntent) {


        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);


        Mat img = Imgcodecs.imread("/sdcard/Download/bigpicture.png");

        Mat templ = Imgcodecs.imread("/sdcard/Download/template.png");

        String outFile = "/sdcard/Download/result.png";


        // Create the result matrix

        int result_cols = img.cols() - templ.cols() + 1;

        int result_rows = img.rows() - templ.rows() + 1;

        Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);


        // Do the Matching Normalize and Perform the template matching operation

        Imgproc.matchTemplate(img, templ, result, 3);

        // Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());

        Imgproc.threshold(result, result,0.98,1,Imgproc.THRESH_TOZERO);


        // Localizing the best match with minMaxLoc. We localize the minimum and maximum values in the result matrix R by using minMaxLoc.

        Point matchLoc;

        Point maxLoc;

        Point minLoc;


    

慕尼黑的夜晚无繁华
浏览 209回答 2
2回答

HUX布斯

- 解决了 -第一期AndroidManifest.xml 需要这样的权限;<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>第 2 期文件路径错误并更改;Mat img = Imgcodecs.imread("/sdcard/Download/bigpicture.png");Mat templ = Imgcodecs.imread("/sdcard/Download/template.png");String outFile = "/sdcard/Download/result.png";到String path = Environment.getExternalStorageDirectory().getPath();Mat img = Imgcodecs.imread(path + "/Download/bigpicture.png");Mat templ = Imgcodecs.imread(path + "/Download/template.png");String outFile = path + "/Download/result.png";感谢您的关注和努力。

喵喔喔

确保 matchTemplate() 的所有参数都具有正确的大小和类型。来自 OpenCV 文档:image – 搜索运行的图像。它必须是 8 位或 32 位浮点数。templ - 搜索的模板。它必须不大于源图像并且具有相同的数据类型。所以请确保您的 roi 是类型(8 位或 32 位浮点)。还要检查您的图像是否正确打开,因为如果模板太小,它会给出该错误。
随时随地看视频慕课网APP

相关分类

Java
我要回答