【必备技能】机器视觉C#开发者低代码开发OpenCV算法_c#和c++开发机器视觉
更多参考资料猛戳这里 《OpenCV4 C# 系统化开发》
OpenCV C# 概述
OpenCV4已经支持多种开发语言包含C++、Java、Python、C#、JS等开发语言。其中工业界最常用的两种OpenCV SDK分别是C++与C#。在机器视觉行业中80%的项目开发以C#语言为主,所以掌握OpenCV C#开发对每个上位机开发者与机器视觉算法开发者尤为重要。
环境配置与测试
VS2022 + OpenCVCSharp4.10配置安装与测试
OpenCV支持C#语言SDK是通过开源OpenCV Wapper库支持opencvsharp框架实现,github地址如下:
https://github.com/shimat/opencvsharp
用 opencvsharp 就可以跟Python、C++一样轻松在C#语言中使用OpenCV SDK完成各种图像处理与深度学习模型推理部署。
从VS2022中直接安装,截图如下:
代码测试
安装好OpenCVCSharp开发包支持以后,直接创建一个C#语言的控制台空项目,然后创建一个cs文件,把下面的代码直接贴进去
using OpenCvSharp;class Program {static void Main() {using var src = new Mat(\"D:/lena.png\", ImreadModes.Grayscale);using var dst = new Mat();Cv2.Canny(src, dst, 50, 200);using (new Window(\"src image\", src)) using (new Window(\"dst image\", dst)) {Cv2.WaitKey();}}}
OpenCV C#工作流引擎 - 高效OpenCV C#开发
OpenCV C# 工作流引擎,轻松帮助机器视觉与C#上位机开发者提升OpenCV开发能力,低代码轻松实现OpenCV模板匹配、卡尺测量、深度学习模型部署、轮廓分析等多种OpenCV操作。工作流引擎SDK下载地址:
https://gitee.com/opencv_ai/opencv_workflow
首先从这里下载OpenCV工作流SDK开发包,解压缩之后把DLL文件拷贝到对应的C#项目的bin目录里面。
首先实现一个多目标多角度多尺度的模板匹配,OpenCV实验大师中导出对应的OpenCV算法工作流文件以后,直接在C#中调用代码如下:
public void run_workflow_ncc_match(){ //1.create instance IntPtr myInstance = OEMTSWorkflowHelper.workflowClassInit2(); // 2.load workflow file bool succ = OEMTSWorkflowHelper.loadVMConfigFile(myInstance, \"D:/match_template_test.vm\".ToCharArray(), \"ba8e9ea82fb37f1722ad2d9f4962e7e4\".ToCharArray()); // 3.run workflow with input image Mat src = Cv2.ImRead(\"D:/test001.bmp\"); Mat dst = new Mat(src.Size(), src.Type()); int w = src.Cols; int h = src.Rows; OEMTSWorkflowHelper.runWorkflow(myInstance, src.CvPtr, dst.CvPtr, w, h); int num = OEMTSWorkflowHelper.getNumOfMatchedBoxes(myInstance); OEMTSWorkflowHelper.TplBoxInfoWrapper[] tplBoxInfo; tplBoxInfo = new OEMTSWorkflowHelper.TplBoxInfoWrapper[num]; OEMTSWorkflowHelper.getWrapperMatchedBoxInfos(myInstance, tplBoxInfo); Console.WriteLine(\"get num of matched boxes \" + num); for (int i = 0; i < num; i++) { Console.WriteLine(\"box.x: \" + tplBoxInfo[i].x); Console.WriteLine(\"box.y: \" + tplBoxInfo[i].y); Console.WriteLine(\"box score: \" + tplBoxInfo[i].score); Console.WriteLine(\"box angle: \" + tplBoxInfo[i].angle); } // 4.display result image Cv2.ImShow(\"OpenCV学堂-工作流引擎SDK之边缘模板匹配演示\", dst); Cv2.ImShow(\"input\", src); Cv2.WaitKey(0); Cv2.DestroyAllWindows(); // 5.release resource src.Release(); dst.Release(); OEMTSWorkflowHelper.deleWorkflowInstance(myInstance);}
再实现一个OpenCV的二值图像分析,OpenCV实验大师中导出对应的OpenCV算法工作流文件以后,直接在C#中调用代码如下:
public void run_ca_workflow(){ //1.create instance IntPtr myInstance = OEMTSWorkflowHelper.workflowClassInit2(); // 2.load workflow file bool succ = OEMTSWorkflowHelper.loadVMConfigFile(myInstance, \"D:/contours_analysis_demo.vm\".ToCharArray(), \"ba8e9ea82fb37f1722ad2d9f4962e7e4\".ToCharArray()); // 3.run workflow with input image Mat src = Cv2.ImRead(\"D:/2.jpg\"); Mat dst = new Mat(src.Size(), src.Type()); int w = src.Cols; int h = src.Rows; OEMTSWorkflowHelper.runWorkflow(myInstance, src.CvPtr, dst.CvPtr, w, h); int num = OEMTSWorkflowHelper.getNumOfContours(myInstance); Console.WriteLine(\"get num of contours: \" + num); // retrieve the contour information OEMTSWorkflowHelper.ContourInfoWrapper[] contoursInfo = new OEMTSWorkflowHelper.ContourInfoWrapper[num]; OEMTSWorkflowHelper.getWrapperContoursInfo(myInstance, contoursInfo); for(int i=0; i< contoursInfo.Length; i++) { Console.WriteLine(i + \"th contour info as below\"); Console.WriteLine(\"roundness: \" + contoursInfo[i].roundness); Console.WriteLine(\"contour area: \" + contoursInfo[i].area); } // 4.display result image Cv2.ImShow(\"OpenCV学堂-工作流引擎SDK之轮廓分析\", dst); Cv2.ImShow(\"input\", src); Cv2.WaitKey(0); Cv2.DestroyAllWindows(); // 5.release resource src.Release(); dst.Release(); OEMTSWorkflowHelper.deleWorkflowInstance(myInstance);}
总结:
只需要调用几行OpenCV工作流SDK接口代码,就可以实现在C#上位机中完成各种OpenCV算法的集成调用,非常容易上手。通过调用几行相同的OpenCV工作流SDK接口代码即可实现C#上位机跟OpenCV算法的集成。更多参考资料猛戳这里 《OpenCV4 C# 系统化开发》