• 正文概述
  • 编号:A5
    大小:8M
    环境:Python3.8、OpenCV4.6、Pycharm2020
    简介:判断瓶口是否完好,寻找瓶口缺陷部分,并将其框出(以下图为例进行演示)(包含程序部分代码)

    解决步骤:
    -通过Hough圆检测,获取瓶口外侧圆,确定圆的位置和尺寸,对瓶口部分进行极坐标变化和极坐标反变换,消除瓶口外侧区域的干扰。
    -对之后的图像进行处理,提取缺陷部分进行轮廓绘制和缺陷判别。
    1、导入功能包,读取图像
    2、Hough圆检测获取瓶口位置和大小
    为了防止误判,对圆半径进行限制,保证获得瓶口最外侧的轮廓./bottle_create.py 对框中瓶子进行检查
    ****************************************************************************************************
    ”’hough圆变换”’
    cimg = cv2.cvtColor(bottle,cv2.COLOR_GRAY2BGR) # 转换成彩色图
    circles = cv2.HoughCircles(median,cv2.HOUGH_GRADIENT,1,100,
    param1=100,param2=60,minRadius=150,maxRadius=160) # Hough圆检测
    circles = np.uint16(np.around(circles))
    #print(circles)
    for i in circles[0,:]: # 遍历circles,i为列表,i中包含多个列表,列表为[x,y,r]圆心坐标和半径
    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
    #cv_show( ‘cimg’,cimg)
    ****************************************************************************************************

    3、极坐标变化与反变换
    为了消除瓶口外侧部分带来的干扰。进行极坐标变换,将极坐标中心设为圆心,极半径为圆半径;进行反变化,将瓶口放在原图大小的原位置
    ****************************************************************************************************
    ”’极坐标变换”’
    polarImg = cv2.warpPolar(bottle,(300,900),center,radius,
    cv2.INTER_LINEAR + cv2.WARP_POLAR_LINEAR)
    #cv_show(‘polarImg’,polarImg)
    ”’反变换”’
    b_bottle=cv2.warpPolar(polarImg,psp, center,radius,
    cv2.INTER_LINEAR + cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP)
    #cv_show(‘b_bottle’,b_bottle)
    ****************************************************************************************************


    4、图像处理
    通过均值滤波消除干扰,阈值变换检测瓶口的亮点,由于出现小白点的干扰,进行开运算处理,再进行膨胀,将缺陷区域联通

    5、轮廓检测和缺陷判断
    寻找上图的外接轮廓,遍历这些轮廓,判断是否在瓶口处,并将其在原图上画出;将缺陷记录,判断存在缺陷,在图片上显示NOT OK
    ****************************************************************************************************
    ”’找缺陷”’
    contours,hierarchy = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) #寻找轮廓
    s_bottle=cv2.cvtColor(bottle, cv2.COLOR_GRAY2BGR)
    counts=[]
    for cnt in contours:
    (x, y, w, h) = cv2.boundingRect(cnt) #获取轮廓位置大小
    # print(x, y, w, h)
    if x>circles_x1 and xcircles_y1 and y5 or h>5): # 判断轮廓是否在瓶口处
    cv2.drawContours(s_bottle,cnt,-1,(0,0,255),2) # 绘制轮廓
    counts.append(cnt) # 记录缺陷
    ****************************************************************************************************

    以上就是瓶口缺陷检测的全部过程,其中还有不足,还达不到100%的成功
    放上原图和最后做完的效果


    运行展示

    ./bottle_create.py 对框中瓶子进行检查

    配套文件

    我们提供完整项目文件清单如下:
    文件目录
    ├ 1.项目源码
    ├ 2.运行截图
    └ 3.演示视频

    1. 本站所有资源来源于原创和复现,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者文档,可以与我们交换,分享有积分奖励和额外收入!
    4. 本站提供的源码、文档等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.2zcode.com",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明网站内的所有源码都经过我们亲自测试,均可以正常使用.

    索炜达.猿创 » 基于Python+OpenCV瓶口缺陷检测

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
    你们有qq群吗怎么加入?
    因为每个人购买的系统代码不一样,我们提供都是一对一的优质在线QQ技术支持,目前暂时提供QQ交流群http://www.2zcode.com/zzxt。

    发表评论

    • 209916会员数(个)
    • 3036资源数(个)
    • 0本周更新(个)
    • 0 今日更新(个)
    • 1216稳定运行(天)

    提供最优质的资源集合

    加入VIP
    开通VIP 享更多特权,建议使用 QQ 登录