APP下载

OpenCV在家具板材耐磨图像分析上的应用

2022-10-22范必鑫洪城辉

技术与市场 2022年10期
关键词:原图圆环轮廓

范必鑫,洪城辉

(福建省产品质量检验研究院,福建 福州 350002)

0 引言

OpenCV是一个开源的计算机视觉库,它提供一个间接高效的接口,能实现视觉应用的快速构建;Python具有丰富的标准库,可以缩短开发时间。家具板材耐磨试验是考验家具板材表面耐用性的一项重要指标,当前家具板材耐磨性实验后的花纹保留率的判断主要依靠实验人员的主观判断,存在一定的局限性。为了提高花纹保留率结论的正确性,引入计算机视觉处理,采用工业相机拍摄,计算机上位机软件进行图片处理和花纹保留率的计算。本文主要介绍在Python语言环境下通过调用OpenCV库各类函数、处理图片、计算相关数值后得到花纹保留率的过程。

1 花纹保留部分提取方案

花纹保留率的算法主要是将磨纹带内磨耗部分和花纹保留部分提取出来,求得磨耗面积和花纹保留面积。

方案一:利用漫水填充cv2.FloodFill()函数将磨耗部分(相同颜色)提取出来,然后计算面积;经测试该方案只适用磨纹边界较清晰的,且板材底纹颜色花纹较匀称的,木纹较复杂、磨耗不均匀的样品容易出现找不到磨纹边界、漏填等,误判率较大。

方案二:先将样品原图通过cv2.cvtColor()函数将样品图片转换为HSV色彩空间,再用cv2.inRange()函数判断图像内像素点的像素值是否在指定的范围内,原图对应值在Range内则为255,否则为0;经测试该方案同样不适用板材花纹较复杂、磨耗不均匀的样品。

方案三:利用cv2.threshold()函数二值化阈值处理将样品图片转换为二值图,在二值图内将磨耗部分和花纹保留部分提取出来,经测试该方案适用各类家具板,处理效果符合要求。

根据方案三的思路,笔者要将原始图片(见图1)处理成直观表示磨耗部分和花纹保留部分鲜明区分的二值图。为了减少干扰,首先将磨纹带处理出来,变成只有磨纹带部分的原图,而其余部分均为黑色(见图2),同时圆环的面积即为磨纹带的面积,记为S,可以直接用于后面花纹保留率的计算。

图1 原始图片

图2 只留磨纹带图片

在这里,磨纹带的面积即圆环面积有两种算法:利用画圆环时的大小圆半径值,直接代入圆环面积计算公式S=π(R2-r2);建立与原图大小相同的掩模,在其内画圆环,利用轮廓查找出两个圆的轮廓,再进行轮廓面积计算,带符号的轮廓面积,负的为外轮廓,对应的是大圆面积,正的为内轮廓,对应的是小圆面积,将两个值相加即可获得圆环面积。两种方法计算出的结果相差不大,但为了和后面磨耗部分面积计算采用统一计算原则,让最后花纹保留率结果精确度进一步提高,所以圆环面积的计算也采用轮廓面积计算的方案。

然后将只有磨纹带部分的图片(见图2)二值化处理,再用cv2.threshold()函数(通过OTSU方式的阈值分割进行处理(见图3),获取最佳阈值时将对象设为整张图片,此时获得的最佳阈值发现都偏小,达不到期望效果,原因是整张图片为对象处理的话,黑色部分都参与了计算,所以得到的最佳阈值并不是本文需要的结果。

图3 cv2.threshold()函数通过OTSU方式的阈值分割函数代码

其实本文主要针对的是磨纹带部分,所以改变方案,先在磨纹带内截取若干磨耗较明显的区域,利用cv2.threshold()函数通过OTSU方式的阈值分割进行处理,获取最佳阈值,再将这几个值求平均,获得的值作为cv2.threshold()函数二值化阈值处理整个磨纹带所需的设定阈值(见图4),以此将磨纹带内磨耗部分和花纹保留部分区分开来,二值图上磨纹带内的白色部分为磨耗掉的部分,黑色即为花纹保留部分,如图5~7所示。

图4 cv2.threshold()函数二值化阈值处理代码

图5 花纹保留部分 图6 局部放大图1 图7 局部放大图2

2 花纹保留率算法

在将图片处理成二值图后,为了获得磨耗部分或花纹保留部分的面积,还需要进一步的处理计算。OpenCV中Canny边缘检测,sible算子、轮廓查找等函数都可以查找出图片轮廓,但是涉及到面积计算问题,所以本文直接选择cv2.findContours()查找图像轮廓函数对处理完的二值图进行轮廓查找,然后利用cv2.contourArea()计算轮廓面积函数对所有轮廓面积进行计算,并将oriented参数设为True,得出的轮廓面积将带符号,负值即外轮廓,正值即为内轮廓。将所有的轮廓面积带符号进行累加计算后得出的即为所有磨耗掉的部分的面积。轮廓面积计算代码如图8所示。

图8 轮廓面积计算代码

通过图9~11可以直观地看出在查找轮廓时会将磨耗部分整体找出,即“外轮廓”,带符号计算面积时该类轮廓为负值,将此类轮廓通过cv2.drawContours()函数在原图上画出表现如图10所示,而找出的磨耗部分若存在花纹保留区域,则会被归为“内轮廓”,带符号计算轮廓面积时该类轮廓为正值,将此类轮廓通过cv2.drawContours()函数在原图上画出表现如图11所示,轮廓都是从黑色背景中查找白色对象。

图9 样品部分截图 图10 轮廓面积为负值部分画出图 图11 轮廓面积为正值部分画出图

将所有的轮廓面积值累加,即可求出磨耗部分的面积,结果取绝对值记为S2,那么就可以计算出花纹保留率=(1-S2/S)×100%。

3 结语

OpenCV在计算机视觉处理方面是一个很好的工具,利用OpenCV开发的家具板表面耐磨图像分析系统,很好地填补了家具板耐磨试验后的花纹保留率计算机自动化评判的空白,大大缩小了花纹保留率结果评价的误差范围。

猜你喜欢

原图圆环轮廓
圆环填数
跟踪导练(三)
完形:打乱的拼图
找一找
巧剪圆环
成语圆环
转动戒指
跨越平凡
巧拼火柴棒
儿童筒笔画