1 前言
实际项目中,很可能会遇到用视觉测量工件的高度、宽度(也可为直径)的情形,毕竟这类型也比较常见嘛!
一般而言测量工件尺寸往往离不开物体的轮廓检测。提到轮廓就自然想到了边缘检测、二值化等一系列关联手段。
2 检测对象
工件如下:
检测其高度+宽度(就是直径啦!)。
3 思路及代码演示
观察成像效果,发现可以主要利用X方向的亮度变化特征去实现检测目的。由于光照角度等原因,Y方向上有一些亮度变化(但并不是工件自身引起的)。所以我们主要关心X方向的亮度变化而不是Y方向的,但最好也不要完全舍弃Y方向的亮度变化,这就需要自定义权重值。
使用opencv canny算子的话,则无法进行自定义的X、Y方向的加权融合。看该函数的原型便知。
Canny( InputArray src, // 8-bit的输入图像,也就是单通道图像 OutputArray edges,// 输出边缘图像, 一般都是二值图像,背景是黑色 double threshold1,// 低阈值,常取高阈值的1/2或者1/3 double threshold2,// 高阈值 int aptertureSize,// Soble算子的size,通常3x3,取值3 bool L2gradient // 选择 true表示是L2来归一化,否则用L1归一化
版权声明:本文为thequitesunshine007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。