首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C#轻松实现OpenCV算法零代码开发

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

作者头像
OpenCV学堂
发布2026-04-02 20:01:07
发布2026-04-02 20:01:07
810
举报
前言介绍

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

OpenCV安装与环境测试

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

OpenCV官方的开发包至今还不支持C#语言SDK,但是C#有个著名的开源OpenCV Wapper库支持- opencvsharp,github地址如下:

代码语言:javascript
复制
https://github.com/shimat/opencvsharp

用 opencvsharp 就可以跟Python、C++一样轻松在C#语言中使用OpenCV SDK完成各种图像处理与深度学习模型推理部署。

图片
图片

从VS2022中直接安装,截图如下:

图片
图片
图片
图片

代码测试

安装好OpenCVCSharp开发包支持以后,直接创建一个C#语言的控制台空项目,然后创建一个cs文件,把下面的代码直接贴进去

代码语言:javascript
复制
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工作流SDK

下载地址:

代码语言:javascript
复制
https://gitee.com/opencv_ai/opencv_workflow

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

OpenCV工作流引擎SDK演示

首先实现一个多目标多角度多尺度的模板匹配,OpenCV实验大师中导出对应的OpenCV算法工作流文件以后,直接在C#中调用代码如下:

代码语言:javascript
复制
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#中调用代码如下:

代码语言:javascript
复制
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);
}

运行结果如下:

图片
图片
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档