首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Halcon缺陷检测实例转OpenCV实现(四)

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

作者头像
Color Space
发布2020-12-22 09:52:02
发布2020-12-22 09:52:02
1.7K0
举报

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

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

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

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

  • 计算获取药片盘位置代码:
代码语言:javascript
复制
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=0
for cnt in contours:
  (x, y, w, h) = cv2.boundingRect(cnt)
  if w > 300 and h > 300:
    break
  • 计算每个药片位置代码:
代码语言:javascript
复制
ROI = img[y:y+h, x:x+w]
width = 125
height = 50
col_space = 25
row_space = 20
isNG = False
index = 0
for 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颜色轮廓检测与判断代码:
代码语言:javascript
复制
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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档