继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

告别EmguCV!OpenCvSharp3 初探

慕神8447489
关注TA
已关注
手记 1310
粉丝 174
获赞 957

最近接了个小毕设,要求用winform调用OpenCV识别一些简单的物件。网上关于调用DLL的文看的我一头雾水,而且也知道有类似OpenCV的C#接口的计算机视觉库,也就直接去了解这方面了。EmguCV应该是比较早且之前比较出名的C#版OpenCV,目前项目有507个stars。然而另一个日本人编写的类库已经有1200+的stars,并且在Visual Studio中下载量也已经超过了OpenCvSharp。下面就以OpenCvSharp为大家传授点人生经验(啊蛤)。


webp

作者github

INTRO

这是项目的链接,里面有详细的介绍和Document。

webp

项目Feature


项目Features如上。比较好的一点就是能够很方便地跟.Net平台的数据结构进行转换。而且相对EmguCV而言,实现的算法更多,风格也跟C++ API更相似。


对于商用来说,EmguCV使用的是GPL协议,OpenCvSharp则是跟OpenCV一样的BSD协议(网上有人说是LGPL?但github上的README列出来的是BSD)。这方面的话对于学习者来说没啥区别,但对于正儿八经的开发者来说还是需要考虑的,BSD则是更有吸引力的协议。

至于安装也是十分简单,只需要在VS上就能完成。我这里使用的是2017 community,仅供参考。

webp

打开NuGet包管理器

webp

等待安装完成就好

可以看到,下载量足足有20w,而且已经超过了EmguCV了。

Demo

这里使用Winform做个带界面的小程序,拖个按钮就好。也可以使用空项目。

private void btnOpen_Click(object sender, EventArgs e){    //选择图片
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.RestoreDirectory = true;    string imgName = "";    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        imgName = openFileDialog.FileName;
    }
    Console.WriteLine("文件名为" + imgName);    //读取并进行边缘检测
    Mat srcImg = new Mat(imgName, ImreadModes.Color);
    Cv2.ImShow("input", srcImg);

    Mat dstImg = new Mat();
    Cv2.Canny(srcImg, dstImg, 50, 200);
    Cv2.ImShow("output", dstImg);
}

webp

国际惯例,lenna女神拿出来

webp

Canny边缘检测

其他

由于一年多没用C#和Winform,所以语法方面忘得差不多了。唠叨一下项目中遇到的坑。

在C艹中,ROI是可以这样定义的。image是事先定义的Mat。

Mat imageROI = image(Rect(500, 250, logo.cols, logo.rows));

而在C井中,要这样定义

Mat dstImg = new Mat(srcImg, new Rect(x, y, width, height));

当时想用C++的Style来定义,搞了半天发现根本就没实现。。。当时就在吐槽,后来发现C#是不能对括号进行重载的 = =!真是尴尬。C#这方面的话还是要用熟练,搞机器视觉这行还是很有用的。



作者:Jacob杨帮帮
链接:https://www.jianshu.com/p/37dab2c67477


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP