编号: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 x
cv2.drawContours(s_bottle,cnt,-1,(0,0,255),2) # 绘制轮廓
counts.append(cnt) # 记录缺陷
****************************************************************************************************
以上就是瓶口缺陷检测的全部过程,其中还有不足,还达不到100%的成功
放上原图和最后做完的效果
./bottle_create.py 对框中瓶子进行检查 我们提供完整项目文件清单如下:
配套文件
文件目录
├ 1.项目源码
├ 2.运行截图
└ 3.演示视频
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者文档,可以与我们交换,分享有积分奖励和额外收入!
4. 本站提供的源码、文档等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.2zcode.com",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:网站内的所有源码都经过我们亲自测试,均可以正常使用.
索炜达.猿创 » 基于Python+OpenCV瓶口缺陷检测
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 你们有qq群吗怎么加入?