### ZV_SHAPEFINDS -- 多模板匹配

类型 | 形状模板匹配
描述 | 使用多个形状模板，在图像img上进行匹配查找。
语法 | ZV_SHAPEFINDS(modelList,param,img,matchs[,numMatchs=0,minDis=0]) 参数： modelList：ZVOBJECT类型，形状模板列表 param：匹配参数矩阵，行数为1或等于mods列表长度，列数为7列依次为：最小分数, 数量, 最小距离, 最低阈值, 精度, 速度, 极性，含义参考单模板匹配。行为1行时则所有模板共用该行的匹配参数，为 n 行时矩阵的行数必须要等于模板列表的长度，表示每行对应一个模板的匹配参数 img：ZVOBJECT类型，待匹配的搜索图像,8U单通道 matchs：ZVOBJECT类型，匹配结果，矩阵类型，输出参数，n行6列矩阵,每行一个匹配结果，每行的数据依次为score、x、y、angle、scale、modelId，其中modelId表示的是模板列表中对应id的模板匹配到的结果 numMatchs：总的最大匹配数量，范围[0,无穷)，当numMatchs为0时使用param中的参数，以模板id升序（若id相同则分数降序）输出目标，当numMatchs大于零时以分数降序输出目标，numMatchs与真实目标大小关系参考单模板匹配 min_dist：匹配最小距离，表示两目标之间允许存在的最小距离。当minDist小于或等于0时使用param中的参数，针对模板对应的目标，含义参考单模板匹配，当minDist大于零时，针对所有匹配目标
适用控制器 | 支持ZV功能或者5系列以上的控制器
例子 | ZV_SETSYSINT("ShapeCreateLevel",4)'设置为完全创建模板特征 ZVOBJECT img1,img2,img3,match_img,results,color_img,model1, model2,model3,model_list,param,rigid_mat,model_contlist,dst_contlist ZV_READIMAGE(img1, "1.jpg", 0)'以原图像格式读取图片 ZV_READIMAGE(img2, "2.jpg", 0) ZV_READIMAGE(img3, "3.jpg", 0) ZV_SHAPECREATE(img1,model1,0,360,1,1,50,0,0,0,0) '创建模板 ZV_SHAPECREATE(img2,model2,0,360,1,1,90,0,0,0,0) ZV_SHAPECREATE(img3,model3,0,360,1,1,77,0,0,0,0) ZV_CLEAR(model_list)'清空model_list ZV_LISTINSERT(model1, model_list, -1)'将模板插入模板列表 ZV_LISTINSERT(model2, model_list, -1) ZV_LISTINSERT(model3, model_list, -1) ZV_MATGENCONST(param,3,7,0)'构造3行7列的矩阵，并设置匹配参数 TABLE(0,90,1,0,-1,3,9,0) ZV_MATSETROW(param,0,7,0) TABLE(0,90,1,0,-1,3,9,0) ZV_MATSETROW(param,1,7,0) TABLE(0,90,1,0,-1,3,9,0) ZV_MATSETROW(param,2,7,0) ZV_READIMAGE(match_img, "test.png", 0)'以原图像格式读取图片 ZV_SHAPEFINDS(model_list,param,match_img,results,0,0)'多目标匹配 ZV_LISTGET(model_list,model,TABLE(5)) ZV_SHAPECONTOURS(model, model_contlist, 0)'获取模板轮廓 ZV_GETRIGIDVECTOR(rigid_mat,0,0,0,TABLE(1),TABLE(2),TABLE(3))'计算刚性变换矩阵 ZV_CONTAFFINE(model_contlist, rigid_mat,dst_contlist)'轮廓仿射变换 ZV_GRAYTORGB(match_img,color_img)'灰度图转化为RGB图像 ZV_CONTLIST(color_img,dst_contlist,ZV_COLOR(0,255,0),0)'绘制轮廓
相关指令 | ZV_SHAPECREATE、ZV_SHAPECREATERE