0
点赞
收藏
分享

微信扫一扫

Halcon缺陷检测实例转OpenCV实现(四)



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

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

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

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

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

Halcon缺陷检测实例转OpenCV实现(四)_轮廓检测

Halcon缺陷检测实例转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实现(四)_宽高_06

Halcon缺陷检测实例转OpenCV实现(四)_v8_07

Halcon缺陷检测实例转OpenCV实现(四)_v8_08

Halcon缺陷检测实例转OpenCV实现(四)_轮廓检测_09

Halcon缺陷检测实例转OpenCV实现(四)_宽高_10

举报

相关推荐

0 条评论