|
本帖最后由 z13228604287 于 2022-8-21 18:52 编辑
判断标准:
器件中心闭合处线条向上凸起,则为正方向,判定通行证;向下凹陷,则为负方向,判定失败。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 图片 | 多维矩阵类 | | | 返回结果 | 多维矩阵类 | | |
图片 = 视觉_图像解码 ( #图片1, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片2, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片3, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片4, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片5, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片6, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片7, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片8, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片9, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )图片 = 视觉_图像解码 ( #图片10, #读图_彩色 )返回结果 = 插座_测试 (图片 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (1000 )视觉_显示图像 (“小白鼠”, 返回结果 )视觉_等待按键 (0 )返回 (0 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 灰度化 | 多维矩阵类 | | | HSV_图 | 多维矩阵类 | | | HSV下限 | 标量类 | | | HSV上限 | 标量类 | | | 蒙版 | 多维矩阵类 | | | 核心1 | 多维矩阵类 | | | 核心2 | 多维矩阵类 | | | 轮廓 | 点2i二维数组类 | | | 计次 | 整数型 | | | 圆中心 | 点2i类 | | | 圆半径 | 整数型 | | | 循环矩形 | 矩形2i类 | | | 滤波图 | 多维矩阵类 | | | 绝对值图 | 多维矩阵类 | | | 二值化 | 多维矩阵类 | | | 最大_行 | 整数型 | | | 感兴区域 | 矩形2i类 | | | 感兴区域图 | 多维矩阵类 | | | 视觉_调整尺寸 (图片, 图片, , 0.25, 0.25, #插值_双线性二次 ) 视觉_颜色空间转换 (图片, 灰度化, #颜色_BGR转GRAY, 0 )视觉_颜色空间转换 (图片, HSV_图, #颜色_BGR转HSV, 0 )HSV下限. 初始化 (0, 0, 30, )HSV上限. 初始化 (175, 100, 120, ) 视觉_在范围内 (HSV_图, HSV下限, HSV上限, 蒙版 ) 视觉_中值滤波 (蒙版, 蒙版, 3 ) 蒙版 = 填充孔洞 (蒙版 )核心1. 初始化 (15, 15, #Cv无符号字节型, 标量 (1 )) 视觉_高级形态 (蒙版, 蒙版, #形态_开, 核心1, , 1, 0, )核心2. 初始化 (5, 5, #Cv无符号字节型, 标量 (1 )) 视觉_高级形态 (蒙版, 蒙版, #形态_闭, 核心2, , 1, 0, )视觉_查找轮廓 (蒙版, 轮廓, , #检测_外部, #逼近_任何, )计次循环首 (轮廓. 尺寸 (), 计次 )循环矩形 = 视觉_最大轮廓矩形V (轮廓, 计次 )如果真 (循环矩形.宽度 > 200 且 循环矩形.高度 > 200 )视觉_绘制轮廓 (图片, 轮廓, 计次, 标量 (0, 0, 255 ), 2, 8, , 2147483647, )计算轮廓最大内接圆 (轮廓, 计次, 蒙版, 圆中心, 圆半径 )视觉_圆 (图片, 圆中心, 圆半径, 标量 (0, 255 ), 2, 8, 0 )计次循环尾 ()感兴区域. 初始化 (圆中心.顶边 - 圆半径 + 40, 圆中心.顶边 - 圆半径 + 40, 圆半径 × 2 - 80, 圆半径 × 2 - 80 )感兴区域图 = 灰度化. 感兴区域 (感兴区域 )视觉_高斯滤波 (感兴区域图, 滤波图, 尺寸2i (7, 7 ), 0, 0, 4 )视觉_绝对差异 (感兴区域图, 滤波图, 绝对值图 )视觉_阈值 (绝对值图, 二值化, 10, 255, #阈值_二进制 )最大_行 = 找线所在行 (二值化 )视觉_线 (图片, 点2i (圆中心.左边 - 70, 感兴区域.顶边 + 最大_行 ), 点2i (圆中心.左边 + 70, 感兴区域.顶边 + 最大_行 ), 标量 (255, 255, 0 ), 2, #线类型_抗锯齿, 0 )如果 (感兴区域.顶边 + 最大_行 < 圆中心.顶边 )视觉_放置文本 (图片, “PASS”, 点2i (圆中心.左边 - 30, 圆中心.顶边 ), #字体_衬线_简单, 0.8, 标量 (0, 255, 0 ), 2, 8, 假)视觉_放置文本 (图片, “FAIL”, 点2i (圆中心.左边 - 30, 圆中心.顶边 ), #字体_衬线_简单, 0.8, 标量 (0, 0, 255 ), 2, 8, 假)返回 (图片)变量名 | 类 型 | 静态 | 数组 | 备 注 | 黑色_图 | 多维矩阵类 | | | 轮廓 | 点2i二维数组类 | | |
黑色_图. 初始化 (蒙版. 行数 (), 蒙版. 列数 (), #Cv无符号字节型, )视觉_查找轮廓 (蒙版, 轮廓, , #检测_外部, #逼近_任何, )轮廓. 面积排序 (真)视觉_绘制轮廓 (黑色_图, 轮廓, 0, 标量 (255, 255, 255 ), -1, 8, , 2147483647, )返回 (黑色_图 )|
计算轮廓最大内接圆 | | | |
轮廓 | 点2i二维数组类 | | | | 轮廓索引 | 整数型 | | | | 蒙版 | 多维矩阵类 | | | | 中心 | 点2i类 | | | | 半径 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 行 | 整数型 | | | 列 | 整数型 | | | 最大值坐标 | 点2i类 | | | 最大值 | 双精度小数型 | | | 距离 | 多维矩阵类 | | |
距离. 初始化 (蒙版. 列数 (), 蒙版. 行数 (), #Cv小数型, )变量循环首 (0, 蒙版. 行数 () - 1, 1, 行 )变量循环首 (0, 蒙版. 列数 () - 1, 1, 列 )距离. 置元素 (行, 列, 视觉_点多边形测试V (轮廓, 轮廓索引, 点2f (列, 行 ), 真)) 变量循环尾 ()变量循环尾 ()视觉_最小最大位置 (距离, , 最大值, , 最大值坐标, )半径 = 取绝对值 (最大值 ) 中心 = 最大值坐标 变量名 | 类 型 | 静态 | 数组 | 备 注 | 最大值 | 整数型 | | | 当行值 | 整数型 | | | 最大值行 | 整数型 | | | i | 整数型 | | | 变量循环首 (0, 蒙版. 行数 () - 1, 1, i )当行值 = 视觉_计数非零 (蒙版. 行范围 (i, i + 1 )) 如果真 (当行值 > 最大值 )最大值 = 当行值 最大值行 = i 变量循环尾 ()返回 (最大值行 )
//效果图
|
|