OpenCV实战案例之宽高度测量

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版权协议,转载请附上原文出处链接和本声明。