Halcon缺陷检测实例转OpenCV实现(一)---网格缺陷检测
Halcon缺陷检测实例转OpenCV实现(二)---PCB印刷缺陷检测
Halcon缺陷检测实例转OpenCV实现(三)---凸缺陷检测
Halcon缺陷检测实例转OpenCV实现(四)---同颜色药片缺陷检测
本期文章继续介绍缺陷检测专题的第五个案例,用OpenCV实现Halcon中一个混合颜色药片缺陷检测的实例,前面案例链接如上↑↑↑。
Halcon中对应的例子为check_blister_mixed.hdev,用于检测药片包装中是否有错的药片或漏装的药片,检测效果如下:
(1) 正常情况黄色胶囊3个,红色和绿色胶囊各6个
(2) 异常情况包括漏装,少装和错装
Halcon实例中使用GMM分类方法来实现,GMM(高斯混合模型)常用图像分割分类,比如常见的运动物体检测中的前景和背景分割等,如下:
使用OpenCV实现方法我们用简单的HSV颜色提取和轮廓分析即可,毕竟这个实例中颜色只有3种,我们可以避免准备和训练样本的步骤。当然,如果有更多的颜色或形态的胶囊混合,也可以加一个CNN分类网络来做每一个ROI的识别。我们这里只介绍HSV颜色提取方法,步骤也简单:
(1)设定黄色、红色、绿色的HSV值范围(记得用我上篇文章给大家的工具或自己写个滑动条调试工具),能区分对应颜色的同时,不要将几种颜色混淆;
(2)按照上篇文章的方法,将药片分割成单个ROI,然后提取对应的颜色轮廓比对;
(3)比对颜色是否对应,同时轮廓的宽高是否满足要求,然后将每个满足要求的颜色轮廓计数,最后做结果判定即可。
如下是核心代码和运行效果:
(1) HSV颜色取值范围:
lower_yellow = np.array([0,40,40])upper_yellow = np.array([50,255,255])
lower_red = np.array([0,10,10])upper_red = np.array([10,255,255])
lower_green = np.array([20,60,50])upper_green = np.array([80,255,255])
(2)颜色轮廓提取:
hsv_roi=cv2.cvtColor(small_roi,cv2.COLOR_BGR2HSV)mask_yellow = cv2.inRange(hsv_roi,lower_yellow,upper_yellow)mask_red = cv2.inRange(hsv_roi,lower_red,upper_red)mask_green = cv2.inRange(hsv_roi,lower_green,upper_green)mask_yellow = cv2.medianBlur(mask_yellow, 3)#中值滤波mask_red = cv2.medianBlur(mask_red, 3)#中值滤波mask_green = cv2.medianBlur(mask_green, 3)#中值滤波
(3)单个胶囊判断与最终结果判断逻辑:
运行效果: