用OpenCvSharp还是C#调用opencv c++的dll

用OpenCvSharp还是C#调用opencv c++的dll

都可以,不过一般是是用c++调用opencv的cpp接口完成你要的功能,然后c++导出dll给csharp用,比较就速度而言,csharp还是比不上cpp,另外就是cpp有比较多的案例可以用,别人的开源代码也基本上是cpp,而不会是csharp,省去造轮子的时间。
如果你只是个人项目,那就无所谓了,看你哪个会用哪个,哪个方便用哪个。

OpenCvSharp提供了更高级别的API,使得代码更加简洁易懂。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7470074
  • 这篇博客也不错, 你可以看下C#调用C++、Opencv的Dll
  • 除此之外, 这篇博客: opencvsharp模板匹配中的 opencvsharp模板匹配 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  class Program
        {
            static void Main(string[] args)
            {
               //  Mat mat1 = new Mat(@"timg.jpg", ImreadModes.Grayscale);
               // Mat mat2 = new Mat(@"文件名.jpg", ImreadModes.Grayscale);
                Mat mat1 = new Mat(@"1.jpg", ImreadModes.AnyColor);
                Mat mat2 = new Mat(@"2.jpg", ImreadModes.AnyColor);       
                Mat mat3 =new Mat();
                //创建result的模板,就是MatchTemplate里的第三个参数
                mat3.Create(mat1.Cols-mat2.Cols+1,mat1.Rows-mat2.Cols+1,MatType.CV_32FC1);
                //进行匹配(1母图,2模版子图,3返回的result,4匹配模式_这里的算法比opencv少,具体可以看opencv的相关资料说明)
                Cv2.MatchTemplate(mat1,mat2,mat3,TemplateMatchModes.SqDiff);
    
                //对结果进行归一化(这里我测试的时候没有发现有什么用,但在opencv的书里有这个操作,应该有什么神秘加成,这里也加上)
                Cv2.Normalize(mat3, mat3,1,0,NormTypes.MinMax,-1); 
                double minValue, maxValue;
                Point minLocation, maxLocation;
                /// 通过函数 minMaxLoc 定位最匹配的位置
                /// (这个方法在opencv里有5个参数,这里我写的时候发现在有3个重载,看了下可以直接写成拿到起始坐标就不取最大值和最小值了)
                /// minLocation和maxLocation根据匹配调用的模式取不同的点
                Cv2.MinMaxLoc(mat3, out minLocation,out maxLocation);
                //画出匹配的矩,
                //  Cv2.Rectangle(mat1, maxLocation, new Point (maxLocation.X+mat2.Cols, maxLocation.Y+mat2.Rows), Scalar.Red, 2);
                Cv2.Rectangle(mat1, minLocation, new Point(minLocation.X + mat2.Cols, minLocation.Y + mat2.Rows), Scalar.Red, 2);
                Cv2.ImShow("mat1", mat1);
                Cv2.ImShow("mat2", mat2);
    
                //Console.WriteLine(minValue);
                //Console.WriteLine(maxValue);
                Console.WriteLine(minLocation);
                Console.WriteLine(maxLocation);
                Cv2.WaitKey();
            }
        }
    

    结果如下:
    在这里插入图片描述

    在这里插入图片描述