《机器视觉系统应用》课件-条形码检测代码演示_第1页
《机器视觉系统应用》课件-条形码检测代码演示_第2页
《机器视觉系统应用》课件-条形码检测代码演示_第3页
《机器视觉系统应用》课件-条形码检测代码演示_第4页
《机器视觉系统应用》课件-条形码检测代码演示_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

条形码检测课程引入代码分析代码演示一二三目录一课程引入

条形码技术(barcodetechnology,BCT)是在计算机的应用实践中产生和发展起来的一种自动识别技术。它是为实现对信息的自动扫描而设计的,它是实现快速、准确而可靠地采集数据的有效手段。条形码技术的应用解决了数据录入和数据采集的瓶颈问题,为物流管理提供了有利的技术支持。二代码分析

在Opencv内,使用函数cv2.Sobel()实现Sobel算子运算,其语法形式为:Dst=cv2.Sobel(src,ddepth,dx,dy[,ksize[,scale[,delta[,borderType]]]])式中:dst代表目标图像。src代表原始图像。ddepth代表输出图像的深度。其具体对应关系如表所示。sobel算子

二代码分析dx代表x方向上的求导阶数。dy代表y方向上的求导阶数。ksize代表Sobel核的大小。该值为-1时,则会使用Scharr算子进行运算。scale代表计算导数是所采用的缩放因子,默认情况下该值是1,是没有缩放的。data代表加在目标图像dst上的值,该值是可选的,默认为0.borderType代表边界样式。该参数的具体类型及值如表所示。sobel算子

二代码分析1.计算x方向边缘(梯度):dx=1,dy=0在Opencv中的语法格式为dst=cv2.Sobel(src,ddepth,1,0)2.计算y方向边缘(梯度):dx=0,dy=1在Opencv中的语法格式为dst=cv2.Sobel(src,ddepth,0,1)3.数取绝对值在Opencv中,使用函数cv2.converScaleAbs()对参数取绝对值,该函数的语法格式为:dst=cv2.convertScaleAbs(src[,alpha[,beta]])式中:dst代表处理结果。src代表原始图像。alpha代表调节系数,该值是可选值,默认为1。beta代表调节亮度值,该值是默认值,默认为0。sobel算子

二代码分析

在Opencv中,实现均值滤波的函数是错cv2.blur(),其语法格式为:dst=cv2.blur(src,ksize,anchor,borderType)式中:dst是返回值,表示进行均值滤波后得到的处理结果。src是需要处理的图像,即原始图像。ksize是滤波核的大小。滤波核的大小是指在均值处理过程中,其邻域图像的高度和宽度。anchor是锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。borderType是边界样式。通常情况下,使用均值滤波函数时,对于锚点anchor和边界样式borderType,直接采用其默认值即可。均值滤波

三代码演示流程图三代码演示X梯度得到轮廓Y梯度得到轮廓gradX=cv2.Sobel(gray,ddepth=cv2.CV_32F,dx=1,dy=0,ksize=-1)#对x方向求导

#cv2.imshow("gradX",gradX)

gradY=cv2.Sobel(gray,ddepth=cv2.CV_32F,dx=0,dy=1,ksize=-1)#对y方向求导

#cv2.imshow("gradY",gradY)三代码演示x梯度减去y梯度得到轮廓CV_32F转成CV_8U型的图像#Scharr操作后,从X梯度减去Y梯度得到轮廓图,此时噪点较多

gradient=cv2.subtract(gradX,gradY)

#cv2.imshow("gradient",gradient)

#经过处理后,用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,而只是一副灰色的窗口

gradient=cv2.convertScaleAbs(gradient)

#cv2.imshow('gradient1',gradient)三代码演示均值滤波平滑处理二值化#然后进行二值化处理,要么是255(白)要么是0(黑)

blurred=cv2.blur(gradient,(9,9))#通过低通滤波平滑图像

#cv2.imshow("blurred",blurred)

ret,thresh=cv2.threshold(blurred,225,255,cv2.THRESH_BINARY)#进行图像固定阈值二值化

#cv2.imshow("thresh",thresh)三代码演示形态学处理#通过形态学操作,建立一个7*21的长方形内核,内核宽度大于长度,因此可以消除条形码中垂直条之间的缝隙

#将建立的内核应用到二值图中,以此来消除竖杠间的缝隙

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(21,7))#条形码

#对图像进行闭运算

closed=cv2.morphologyEx(thresh,cv2.MORPH_CLOSE,kernel)

#cv2.imshow("closed",closed)

#所得图像仍有许多白点,通过腐蚀和膨胀去除白点,最后一个参数是腐蚀的次数

closed

=cv2.erode(closed,None,iterations=4)

#cv2.imshow("closed1",closed)

closed=cv2.dilate(closed,None,iterations=6)

#cv2.imshow("closed2",closed)三代码演示#寻找轮廓contours,hierarchy=cv2.findContours(closed.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

#如果没有找到,返回0,并向主函数输出Falseiflen(contours)==0:check=Falsereturncheck

#如果有,继续下列操作c=sorted(contours,key=cv2.contourArea,reverse=True)[0]#对contourArea进行降序排序,并取最大值rect=cv2.minAreaRect(c)#生成最小外接矩形

#box为一个ndarry数组,返回4个顶点位置box=0(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论