C#中轻松实现OpenCV算法零代码开发

原创 OpenCV学堂 2025-03-23 22:07
图片点击上方蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

免费领学习资料+微信:OpenCVXueTang_Asst

前言介绍

OpenCV实验大师最新版本v1.3.0版本已经支持C#版本工作流引擎集成调用,完成解决实现了OpenCV C#低代码快速开发与应用,成为每个上位机视觉开发人员必须掌握的技能之一。这里给大家详细介绍C#集成与调用OpenCV实验大师工作流引擎SDK的完整步骤与代码演示。

OpenCV安装与环境测试

VS2022 + OpenCVCSharp4.10配置安装与测试

OpenCV官方的开发包至今还不支持C#语言SDK,但是C#有个著名的开源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, 50200);		using (new Window("src image", src)) 		using (new Window("dst image", dst)) 		{			Cv2.WaitKey();		}	}}
图片


OpenCV实验大师工作流SDK v1.3

下载地址:

https://appetjpz4tj8166.xet.citv.cn/p/course/ecourse/preview/course_2XtK2sEi7HNUwt2WscP6tFwxpIb

首先从这里下载OpenCV实验大师工作流SDK开发包,解压缩之后把DLL文件拷贝到对应的C#项目的bin目录里面。

OpenCV工作流引擎SDK演示

首先实现一个多目标多角度多尺度的模板匹配,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算法的集成调用,非常容易上手。所有的vm算法文件均可以通过OpenCV实验大师工具软件可视化的进行算子设计、修改、生成,然后一键保存。通过调用几行相同的OpenCV工作流SDK接口代码即可实现C#上位机跟OpenCV算法的集成。最新版本OpenCV实验大师工具软件 腾讯微云下载地址:

https://share.weiyun.com/Bxl4fadZ


OpenCV4系统化学习

图片

推荐阅读

OpenCV4.8+YOLOv8对象检测C++推理演示

ZXING+OpenCV打造开源条码检测应用

攻略 | 学习深度学习只需要三个月的好方法

三行代码实现 TensorRT8.6 C++ 深度学习模型部署

实战 | YOLOv8+OpenCV 实现DM码定位检测与解析

对象检测边界框损失 – 从IOU到ProbIOU

初学者必看 | 学习深度学习的五个误区



图片

OpenCV学堂 专注计算机视觉开发技术分享,技术框架使用,包括OpenCV,Tensorflow,Pytorch教程与案例,相关算法详解,最新CV方向论文,硬核代码干货与代码案例详解!作者在CV工程化方面深度耕耘15年,感谢您的关注!
评论 (0)
  • 文/Leon编辑/cc孙聪颖‍去年,百度公关部副总裁璩静的争议言论闹得沸沸扬扬,最终以道歉离职收场。时隔一年,百度的高管又出事了。近日,“百度副总裁谢广军女儿开盒孕妇”事件登上热搜,持续发酵,引起网友对百度数据安全性的怀疑。3月19日晚间,百度正式发布声明,表示坚决谴责窃取和公开他人隐私的网络暴力行为,同时强调,百度内部实施匿名化、假名化处理,经查验,泄露数据并非来自百度,而是海外的社工库,“当事人承认家长给她数据库”为不实信息,针对相关谣言百度已经向公安机关报案。然而,并非所有网友都对这份声明
    华尔街科技眼 2025-03-21 21:21 104浏览
  • 文/郭楚妤编辑/cc孙聪颖‍在人工智能与实体经济深度融合的时代浪潮中,究竟何种 AI 产品,方能切实契合用户对美好未来的向往与期待?3 月 20 日,备受全球瞩目的中国家电及消费电子博览会(AWE2025)于上海新国际博览中心盛大开幕。展会首日,长虹重磅推出首款治愈系 AI TV、客餐厅 PRO 共享空调,以及面向低空经济领域的通信模组等一系列创新产品。这一举动充分展现了长虹在家电领域全面推进 AI 化的坚定决心,以及为低空经济等新兴产业提供有力科技支撑的硬核实力 。“首发” 新品,领航用户价值
    华尔街科技眼 2025-03-21 21:13 54浏览
  • 人形机器人产业节奏预估:2024年原型机元年,2025年小规模量产元年。当宇树科技H1人形机器人以灵动的手部动作在春晚舞台上演创意融合舞蹈《秧Bot》,舞出"中国智造"时,电视机前十几亿观众第一次深刻意识到:那个需要仰望波士顿动力的时代正在落幕。*图源:宇树科技短短数周后,宇树G1机器人又用一段丝滑的街舞在网络收割亿级播放量,钢铁之躯跳出赛博朋克的浪漫。2月11日,宇树科技在其京东官方旗舰店上架了两款人形机器人产品,型号分别为Unitree H1和G1。2月12日,9.9万元的G1人形机器人首批
    艾迈斯欧司朗 2025-03-22 21:05 129浏览
  • 在人工智能与物联网技术蓬勃发展的今天,语音交互已成为智能设备的重要功能。广州唯创电子推出的WT3000T8语音合成芯片凭借其高性能、低功耗和灵活的控制方式,广泛应用于智能家居、工业设备、公共服务终端等领域。本文将从功能特点、调用方法及实际应用场景入手,深入解析这款芯片的核心技术。一、WT3000T8芯片的核心功能WT3000T8是一款基于UART通信的语音合成芯片,支持中文、英文及多语种混合文本的实时合成。其核心优势包括:高兼容性:支持GB2312/GBK/BIG5/UNICODE编码,适应不同
    广州唯创电子 2025-03-24 08:42 153浏览
  • 在智慧城市领域中,当一个智慧路灯项目因信号盲区而被迫增设数百个网关时,当一个传感器网络因入网设备数量爆增而导致系统通信失效时,当一个智慧交通系统因基站故障而导致交通瘫痪时,星型网络拓扑与蜂窝网络拓扑在构建广覆盖与高节点数物联网网络时的局限性便愈发凸显,行业内亟需一种更高效、可靠与稳定的组网技术以满足构建智慧城市海量IoT网络节点的需求。星型网络的无线信号覆盖范围高度依赖网关的部署密度,同时单一网关的承载设备数量有限,难以支撑海量IoT网络节点的城市物联系统;而蜂窝网络的无线信号覆盖范围同样高度依
    华普微HOPERF 2025-03-24 17:00 152浏览
  •       知识产权保护对工程师的双向影响      正向的激励,保护了工程师的创新成果与权益,给企业带来了知识产权方面的收益,企业的创新和发明大都是工程师的劳动成果,他们的职务发明应当受到奖励和保护,是企业发展的重要源泉。专利同时也成了工程师职称评定的指标之一,专利体现了工程师的创新能力,在求职、竞聘技术岗位或参与重大项目时,专利证书能显著增强个人竞争力。专利将工程师的创意转化为受法律保护的“无形资产”,避免技术成果被他人抄袭或无偿使
    广州铁金刚 2025-03-25 11:48 111浏览
  • 在智能终端设备快速普及的当下,语音交互已成为提升用户体验的关键功能。广州唯创电子推出的WT3000T8语音合成芯片,凭借其卓越的语音处理能力、灵活的控制模式及超低功耗设计,成为工业控制、商业终端、公共服务等领域的理想选择。本文将从技术特性、场景适配及成本优势三方面,解析其如何助力行业智能化转型。一、核心技术优势:精准、稳定、易集成1. 高品质语音输出,适配复杂环境音频性能:支持8kbps~320kbps宽范围比特率,兼容MP3/WAV格式,音质清晰自然,无机械感。大容量存储:内置Flash最大支
    广州唯创电子 2025-03-24 09:08 176浏览
  • 无论你是刚步入职场的新人,还是已经有几年经验的职场老手,培养领导力都是职业发展中一个至关重要的环节。拥有良好的领导能力不仅能让你从人群中脱颖而出,也能让你在团队中成为一个值得信赖、富有影响力的核心成员。什么是领导力?领导力并不仅仅意味着“当老板”或者“发号施令”。它更多地是一种能够影响他人、激发团队潜能,并带领大家实现目标的能力。一位优秀的领导者需要具备清晰的沟通能力、解决问题的能力,以及对人心的深刻理解。他们知道如何激励人心,如何在压力下保持冷静,并能在关键时刻做出正确的决策。如何培养领导力?
    优思学院 2025-03-23 12:24 85浏览
  • 今年全国两会期间,“体重管理”和“育儿”整体配套政策引发了持久广泛关注。从“吃”到“养”,都围绕着国人最为关心的话题:健康。大家常说“病从口入”,在吃这件事上,过去大家可能更多是为了填饱肚子,如今,消费者从挑选食材到厨电都贯彻着健康的宗旨,吃得少了更要吃得好了。这也意味着在新消费趋势下,谁能抓住众人的心头好,就能带起众人的购买欲望,才能在新一轮竞争中脱颖而出。作为家电行业的风向标,在2025年中国家电及消费电子博览会(AWE)上,这两个话题也被媒体和公众频繁提及。深耕中国厨房三十余年的苏泊尔再次
    华尔街科技眼 2025-03-22 11:42 75浏览
  • 核心板简介创龙科技 SOM-TL3562 是一款基于瑞芯微 RK3562J/RK3562 处理器设计的四核 ARM C ortex-A53 + 单核 ARM Cortex-M0 全国产工业核心板,主频高达 2.0GHz。核心板 CPU、R OM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。核心板通过 LCC 邮票孔 + LGA 封装连接方式引出 MAC、GMAC、PCIe 2.1、USB3.0、 CAN、UART、SPI、MIPI CSI、MIPI
    Tronlong 2025-03-24 09:59 164浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦