海康的visionmaster使用方便,开发效率高,但比较复杂的应用场景还是用调用SDK方式来实现,官方有WinForm的DEMO,但没找到WPF的,就免费帮海康写个教程吧,海康请打钱。
长这样:
大概流程:
1、开发时需要引用一些dll:
方案相关
VM.PlatformSDKCS.dll
VM.Core.dll
流程相关:
ImageSourceModuleCs.dll
IMVS2dBcrModuCs.dll
控件相关:
VMControls.WPF.Release.dll
VMControls.Interface.dll
Apps.ColorFun.dll
Apps.Style.dll
Microsoft.Expression.Interactions.dll
2、加载方案
VmSolution.Import(SolPath, ""); // 加载方案
3、传入图像
ImageSourceModuleTool imageModu = (ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
Src.GetGray(out Mat gray);
gray.GetArray(out byte[] imgdata);
ImageBaseData imageBaseData = new(imgdata, (uint)imgdata.Length, Src.Width, Src.Height, 1);
imageModu.SetImageData(imageBaseData); // SDK模式设置图像路径
4、执行方案
VmSolution.Instance.SyncRun(); // 方案运行一次
int wait = 0;
while (VmSolution.Instance.IsRunning == true) //等待完成
{
await System.Threading.Tasks.Task.Delay(10);
wait++;
if (wait > 100) return;
}
5、获取结果
IMVS2dBcrModuTool qrtool = (IMVS2dBcrModuTool)VmSolution.Instance["流程1.二维码识别1"];
var qrnum = qrtool.ModuResult.CodeNum;
var codes = qrtool.ModuResult.CodeStr;
var boxes = qrtool.ModuResult.Rect;
for (int i = 0; i < qrnum; i++)
{
var code = codes[i];
var point = new Point(boxes[i].CenterPoint.X, boxes[i].CenterPoint.Y);
Cv2.PutText(Dst, code, point, HersheyFonts.HersheyDuplex, 1, Scalar.Lime, 3);
}