微信公众号: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
从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实验大师工作流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
初学者必看 | 学习深度学习的五个误区