使用emguCV进行徽标识别

时间:2016-12-09 19:35:22

标签: c# opencv emgucv sift

我已经实施了this代码,并在几张图片中显示了徽标 我得到了一些像this这样的结果,但我需要指望有多少图像包含这个标志, 可能就像在大图像或其他东西中查找徽标的所有关键点。 我可以看到我在大图像里面有徽标但是我想使用emguCV以编程方式确认它。 请帮忙。

- 已编辑

这是一段带有单应性的代码,你可以在这里指导一下,因为我对emguCV和openV都是全新的,请帮我算上这些内容

public static Mat Draw(Mat modelImage, Mat observedImage, out long matchTime)
    {
        Mat homography;
        VectorOfKeyPoint modelKeyPoints;
        VectorOfKeyPoint observedKeyPoints;
        using (VectorOfVectorOfDMatch matches = new VectorOfVectorOfDMatch())
        {
            Mat mask;
            FindMatch(modelImage, observedImage, out matchTime, out modelKeyPoints, out observedKeyPoints, matches,
               out mask, out homography);

            //Draw the matched keypoints
            Mat result = new Mat();// new Size(400,400), modelImage.Depth, modelImage.NumberOfChannels);
            Features2DToolbox.DrawMatches(modelImage, modelKeyPoints, observedImage, observedKeyPoints,
               matches, result, new MCvScalar(255, 255, 255), new MCvScalar(255, 255, 255), mask);

            #region draw the projected region on the image

            if (homography != null)
            {

                //draw a rectangle along the projected model
                Rectangle rect = new Rectangle(Point.Empty, modelImage.Size);
                PointF[] pts = new PointF[]
                {
                      new PointF(rect.Left, rect.Bottom),
                      new PointF(rect.Right, rect.Bottom),
                      new PointF(rect.Right, rect.Top),
                      new PointF(rect.Left, rect.Top)
                };
                pts = CvInvoke.PerspectiveTransform(pts, homography);

                Point[] points = Array.ConvertAll<PointF, Point>(pts, Point.Round);
                using (VectorOfPoint vp = new VectorOfPoint(points))
                {
                    CvInvoke.Polylines(result, vp, true, new MCvScalar(255, 0, 0, 255), 5);
                }

            }

            #endregion

            return result;

        }
    }

1 个答案:

答案 0 :(得分:0)

我认为我的答案有点迟了,但我可以帮助其他人。使用以下代码snipppet,您可以计算属于您的匹配要素点(计数行)。 importents变量是 mask 变量。它包含信息。

private int CountHowManyParisExist(Mat mask) { 

Matrix<Byte> matrix = new Matrix<Byte>(mask.Rows, mask.Cols);
mask.CopyTo(matrix);

var matched = matrix.ManagedArray;
var list = matched.OfType<byte>().ToList();
var count = list.Count(a => a.Equals(1));

return count; 
}