Halcon缺陷检测实例转OpenCV实现(一)---网格缺陷检测

    Halcon缺陷检测实例转OpenCV实现(二)---PCB印刷缺陷检测

    Halcon缺陷检测实例转OpenCV实现(三)---凸缺陷检测


    本期文章继续介绍缺陷检测专题的第四个案例,用OpenCV实现Halcon中一个同颜色药片缺陷检测的实例,前面案例链接如上↑↑↑。

    Halcon中对应的例子为check_blister.hdev,用于检测药片包装中是否有错的药片或漏装的药片,检测效果如下:

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_OpenCV

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_OpenCV_02

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_人工智能_03

    Halcon实例的检测思路相对麻烦一点,大家有兴趣自己学习,这里介绍用OpenCV实现的思路:药片盘倾斜矫正 + HSV颜色轮廓检测与删选判断

    (1) 药片盘的倾斜矫正这里省略(具体方法可以通过计算药片盘一边的角度或者最小外接矩形的角度来矫正),这里倾斜很小,这步骤跳过;

    (2) 先定位药片盘的位置,然后根据药片宽高和间距计算每个药片的位置,然后在对应的位置检测绿色药片,对绿色轮廓的宽和高分析,来判断是否为正常药片。

  • 计算获取药片盘位置代码:

img=cv2.imread("./blister_01.png")gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret,thres = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
x=y=w=h=0for cnt in contours:  (x, y, w, h) = cv2.boundingRect(cnt)  if w > 300 and h > 300:    break
  • 计算每个药片位置代码:

ROI = img[y:y+h, x:x+w]width = 125height = 50col_space = 25row_space = 20isNG = Falseindex = 0for i in range(0,5):  for j in range(0,3):    index = index + 1    x1 = x+25 + j*(width+col_space)    y1 = y+25 + i*(height+row_space)    small_roi = img_copy[y1:y1+height+13,x1:x1+width+5]
  • HSV颜色轮廓检测与判断代码:

hsv_img=cv2.cvtColor(small_roi,cv2.COLOR_BGR2HSV)
    lower_hsv = np.array([0,20,135])    upper_hsv = np.array([70,255,255])
    mask = cv2.inRange(hsv_img,lower_hsv,upper_hsv)#根据颜色范围删选    mask = cv2.medianBlur(mask, 5)#中值滤波
    k1 = np.ones((9, 9),np.uint8)    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, k1)#闭运算
    contours2,hierarchy2 = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)        for cnt2 in contours2:      (x2, y2, w2, h2) = cv2.boundingRect(cnt2)      #print(x2, y2, w2, h2)      if w2 > 100 and h2 > 30:        cv2.rectangle(img,(x1,y1),(x1+width+5,y1+height+13),(0,255,0),2)      else:        cv2.rectangle(img,(x1,y1),(x1+width+5,y1+height+13),(0,0,255),2)        isNG = True
    if len(contours2) < 1:      cv2.rectangle(img,(x1,y1),(x1+width+5,y1+height+13),(0,0,255),2)      isNG = True

这里我自己写了一个通过鼠标移动获取屏幕任意点的RGB和HSV只的小工具ColorPicker.exe,可以在这里下载,获取的HSV值可以直接填入OpenCV

链接:https://pan.baidu.com/s/13YMJEdu_18_AHnyUDhME0Q
提取码:utv8

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_人工智能_04

最后的检测效果(结果+标号可以迅速定位复查):

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_人工智能_05

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_OpenCV_06

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_人工智能_07

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_OpenCV_08

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_OpenCV_09

Halcon缺陷检测实例转OpenCV实现(四)  同颜色药片缺陷检测_人工智能_10

如果对完整源码与工具源码感兴趣,欢迎加入知识星球获取,感谢。