在Android中与OpenCV模板匹配期间断言失败错误

眼泪

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

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

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

- 编辑 -

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

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

MyService.java (Android Studio)

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;

        MinMaxLocResult mmr;


        while(true)
        {

            mmr = Core.minMaxLoc(result);
            matchLoc = mmr.maxLoc;

            if(mmr.maxVal >= 0.997)
            {
                Imgproc.rectangle(img, matchLoc,
                        new Point(matchLoc.x + templ.cols(),matchLoc.y + templ.rows()),
                        new    Scalar(0,255,0));

                Imgproc.rectangle(result, matchLoc,
                        new Point(matchLoc.x + templ.cols(),matchLoc.y + templ.rows()),
                        new    Scalar(0,255,0),-1);

                System.out.println(matchLoc.x + "---" + matchLoc.y);
                //break;
            }
            else
            {
                break; //No more results within tolerance, break search

            }

        }

        Imgcodecs.imwrite(outFile, img);

    }

}

MainActivity.java (Android Studio)

import android.content.Intent;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(MainActivity.this, MyService.class);
        startService(intent);
    }


}

结果

E/cv::error(): OpenCV Error: Assertion failed (corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1) in void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int), file /builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp, line 658
E/org.opencv.imgproc: imgproc::matchTemplate_11() caught cv::Exception: /builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp:658: error: (-215) corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1 in function void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)
E/AndroidRuntime: FATAL EXCEPTION: IntentService[MyService]
    Process: com.lacrymae.bapplication, PID: 6565
    CvException [org.opencv.core.CvException: cv::Exception: /builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp:658: error: (-215) corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1 in function void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)
    ]
        at org.opencv.imgproc.Imgproc.matchTemplate_1(Native Method)
        at org.opencv.imgproc.Imgproc.matchTemplate(Imgproc.java:2105)
        at com.lacrymae.bapplication.MyService.onHandleIntent(MyService.java:36)
        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.os.HandlerThread.run(HandlerThread.java:61)
眼泪

- 解决了 -

第 1 期

AndroidManifest.xml 需要这样的权限;

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

第二期

文件路径错误并已更改;

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";

感谢您的兴趣和努力。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Opencv错误:断言失败

iOS和OpenCV错误:断言在PhaseCorrelateRes中失败

Android中的OpenCV模板匹配示例

相机校准代码-OpenCV错误:断言失败

OpenCV(4.1.0)错误:(-215:断言失败)

testcafe中的时间断言

cv :: erode导致错误:OpenCV错误:断言失败(m.dims> = 2)在Mat中

错误:OpenCV(4.1.0)错误:(-215:断言失败)函数'cv :: resize'中的!ssize.empty()

函数'contourArea'中的OpenCV(4.0.0)断言失败

我遇到此错误的麻烦(-215:断言失败)!opencv中的函数'resize'中的!ssize.empty()

失败条件的OpenCV模板匹配标志

Android-OpenCV模板匹配

Android - OpenCV 模板匹配阈值

OpenCV断言失败错误:(-215)scn == 3 || scn == 4在函数cv :: cvtColor中工作ALTERNATE次

OpenCV(3.4.2):错误:(-215:声明失败)使用模板匹配方法

OpenCV calibrateCamera()断言失败

OpenCV断言以ROI失败

OpenCV:断言失败

断言错误:断言失败:在 Databricks 中没有 DeleteFromTable 的计划

TableView CoreData错误:Swift中的断言失败

在gtk中获取断言失败错误。

countNonZero函数在openCV中给出断言错误

Python中来自OpenCV checkVector的断言错误

OpenCV立体摄像机校准错误:断言失败

计算HOG功能时,opencv断言失败错误438

OpenCV图像降噪给出:错误:-215:断言失败

OpenCV错误:断言失败。该怎么办?

openCV错误:断言失败(scn == 3 || scn == 4)

OpenCV错误:在cvtColor中断言失败(scn == 3 || scn == 4)