【问题标题】:OpenCV Template Matching Drawing Rectangle Around MatchOpenCV模板匹配绘制矩形匹配周围
【发布时间】:2013-03-25 18:55:32
【问题描述】:

我想使用模板匹配,我正在使用我发现的一个代码,它可以在位图中执行我想要的操作并获得位图的返回,问题是我不完全确定如何进行绘图矩形。在为 android 创建应用程序时,我只使用 java,没有使用 native。使用我不熟悉的openCV。我将获得多个匹配项,因此我想在这些点周围绘制矩形,并且还能够获得这些匹配项位置的值。

mFind=new Mat(256, 192, CvType.CV_8UC4); 
Input = new Mat(256, 192, CvType.CV_8UC4); 

Mat mResult8u = new Mat(256, 192, CvType.CV_8UC4); 

mResult = new Mat(217, 153, CvType.CV_8UC4); 

Utils.bitmapToMat(bmp2, mFind);
Utils.bitmapToMat(bmp1, Input);


Imgproc.matchTemplate(mFind, Input, mResult, Imgproc.TM_SQDIFF) ;
bmp3= Bitmap.createBitmap(mResult.cols(),  mResult.rows(),Bitmap.Config.ARGB_8888);
Core.normalize(mResult, mResult8u, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Utils.matToBitmap(mResult8u, bmp3);
iv2.setImageBitmap(bmp3);

【问题讨论】:

    标签: android templates opencv matching template-matching


    【解决方案1】:

    mResult 中找到匹配项,使用Core.rectangleInput 上绘制矩形并将其写入文件。

    // / Localizing the best match with minMaxLoc
    MinMaxLocResult mmr = Core.minMaxLoc(mResult);
    
    Point matchLoc;
    if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) {
        matchLoc = mmr.minLoc;
    } else {
        matchLoc = mmr.maxLoc;
    }
    
    // / Show me what you got
    Core.rectangle(Input, matchLoc, new Point(matchLoc.x + templ.cols(),
            matchLoc.y + templ.rows()), new Scalar(0, 255, 0));
    
    // Save the visualized detection.
    System.out.println("Writing "+ outFile);
    Highgui.imwrite(outFile, img);
    

    【讨论】:

    • 感谢您发布此内容(尽管是 3 年前 :))。使用您的方法时,绘制的矩形比模板图像大得多。如何确保绘制正确的矩形边界?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多