【问题标题】:How to call OpenCV's MatchTemplate method from C#如何从 C# 调用 OpenCV 的 MatchTemplate 方法
【发布时间】:2015-09-01 06:15:02
【问题描述】:

我正在尝试使用来自NuGetOpenCVSharp 库来获取模板在图像上的位置。这是我写的代码:

var image = Cv.LoadImage("Image.png");
var template = Cv.LoadImage("Template.png");
var w = (image.Width - template.Width) + 1;
var h = (image.Height - template.Height) + 1;
IplImage result = new IplImage(w, h, BitDepth.F32, 1);

Console.WriteLine("Image: {0} {1}", image.GetSize(), image.ElemType);
Console.WriteLine("Template: {0} {1}", template.GetSize(), template.ElemType);
Console.WriteLine("Result: {0} {1}", result.GetSize(), result.ElemType);

image.MatchTemplate(image, result, MatchTemplateMethod.CCoeffNormed); // throws exception

double minVal, maxVal;
CvPoint minLoc, maxLoc;
result.MinMaxLoc(out minVal, out maxVal, out minLoc, out maxLoc);
Console.WriteLine(maxLoc);

输出:

Image: CvSize (Width:2048 Height:1536) U8C3
Template: CvSize (Width:169 Height:128) U8C3
Result: CvSize (Width:1880 Height:1409) F32C1

例外:

OpenCvSharp.OpenCVException : result.size() == cv::Size(std::abs(img.cols - templ.cols) + 1, std::abs(img.rows - templ.rows) + 1 ) && result.type() == CV_32F

怎么了?错误在哪里?结果数组的大小、位深和通道数看起来是正确的,但是方法仍然会引发异常。

【问题讨论】:

    标签: c# opencv image-processing emgucv opencvsharp


    【解决方案1】:

    应该有异常行

    *image.MatchTemplate(*template*, result, MatchTemplateMethod.CCoeffNormed);*

    【讨论】:

      【解决方案2】:

      不确定原始的类 C 代码有什么问题,但我设法让它与类 C++ 的代码一起使用:

       using OpenCvSharp;
       using OpenCvSharp.CPlusPlus;
       // ...
      
       var image = new Mat("Image.png");
       var template = new Mat("Template.png");
      
       double minVal, maxVal;
       Point minLoc, maxLoc;
       var result = image.MatchTemplate(template, MatchTemplateMethod.CCoeffNormed);
       result.MinMaxLoc(out minVal, out maxVal, out minLoc, out maxLoc);
       Console.WriteLine("maxLoc: {0}, maxVal: {1}", maxLoc, maxVal);
      

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 2012-03-31
        • 2016-08-20
        • 2018-09-03
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多