导读】本文是专栏《计算机视觉40例简介》的第6个案例《缺陷检测》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例06】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

缺陷检测指将图像中的残次品筛选出来。如图1所示,左侧的图像中包含正品(完整的药片)、残次品(不完整的药片),右侧图像中显示了检测的结果。

【计算机视觉40例】案例06:缺陷检测_python

图1 残次品检测

轮廓与原始对象高度拟合,包含了非常丰富的信息。通过对一个对象的最小包围圆形与其轮廓面积的比值,能够将不规则的圆形筛选出来,从而实现缺陷检测,如图2所示。

【计算机视觉40例】案例06:缺陷检测_python_02

图2  面积对比示意图

当然,具体还涉及到最小包围圆形、前景背景的划分等知识点。

1、最小包围圆形

OpenCV提供了函数cv2.minEnclosingCircle()通过迭代算法构造一个对象的面积最小包围圆形。使用该函数能够获取一个对象的最小包围圆形,如图3所示。

【计算机视觉40例】案例06:缺陷检测_opencv_03

图3 最小包围圆形

2、前景背景划分

借助OpenCV的距离变换函数cv2.distanceTransform(),可以方便地将前景对象提取出来。如图4所示是利用该函数划分的前景背景图。

【计算机视觉40例】案例06:缺陷检测_计算机视觉案例教程_04

图4 前景背景划分

缺陷识别的流程图如图5所示。可以看到,在具体实现包含:

  1. 预处理
  2. 前景背景划分:通过距离变换函数cv2.distanceTransform()实现
  3. 缺陷检测:通过判断外接圆和轮廓实现
  4. 【计算机视觉40例】案例06:缺陷检测_计算机视觉案例教程_05

 图5 流程图

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第7章《缺陷检测》获取详细内容。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。

【计算机视觉40例】案例06:缺陷检测_计算机视觉40例_06