计算机视觉 。我们前期文章分享了很多关于类似这方面的文章 。包括人脸识别三部曲 。目标检测 。目标追踪等 。本期文章 。我们介绍一下如何使用opencv来进行条形码的检测 。毕竟超市里面的物品都是有价格条形码 。如何进行opencv条形码的检测 。便成了无人超市需要重点关注并需要解决的问题
文章插图
文章插图
opencv条形码的检测
opencv条形码的检测importnumpyasnpimportcv2image=cv2.imread("11.jpg")gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
首先我们导入需要进行检测的图片 。并把RGB颜色空间的图片转换成灰度照片
文章插图
文章插图
代码截图
ddepth=cv2.CV_32FgradX=cv2.Sobel(gray,ddepth=ddepth,dx=1,dy=0,ksize=-1)gradY=cv2.Sobel(gray,ddepth=ddepth,dx=0,dy=1,ksize=-1)gradient=cv2.subtract(gradX,gradY)gradient=cv2.convertScaleAbs(gradient)blurred=cv2.blur(gradient,(9,9))(_,thresh)=cv2.threshold(blurred,225,255,cv2.THRESH_BINARY)
然后 。我们使用cv.sobel算子进行图片的X Y 轴的边缘检测 。并使用cv2.subtract(gradX, gradY)计算图片的梯度 。以Sobel算子计算x 。y方向上的梯度 。之后在x方向上减去y方向上的梯度 。通过这个减法 。我们留下具有高水平梯度和低垂直梯度的图像区域 。然后cv2.convertScaleAbs返回图片的unit8格式 。参考图片如下 。
文章插图
文章插图
高水平梯度和低垂直梯度的图像区域
函数原型:dst=cv2.Sobel(src,ddepth,dx,dy[,dst[,ksize[,scale[,delta[,borderType]]]]])
函数参数:
1. src – 需要处理的图像
2. ddepth – 图像的深度 。-1表示采用的是与原图像相同的深度 。目标图像的深度必须大于等于原图像的深度
3. dx – 对x轴方向求导的阶数 。一般为0、1、2 。其中0表示这个方向上没有求导
4. dy – 对y轴方向求导的阶数 。一般为0、1、2 。其中0表示这个方向上没有求导
5. dst – 目标图像
6. ksize – Sobel算子的大小 。必须为1、3、5、7
7. scale – 缩放导数的比例常数 。默认情况下没有伸缩系数
8. delta – 可选增量 。将会加到最终的dst中 。同样 。默认情况下没有额外的值加到dst中
9. borderType – 图像边界的模式 。这个参数默认值为cv2.BORDER_DEFAUL
在经过处理后 。需要用convertScaleAbs()函数将其转回原来的uint8形式 。否则将无法显示图像 。而只是一副灰色的窗口 。
函数原型:dst=cv2.convertScaleAbs(src[,dst[,alpha[,beta]]])其中可选参数alpha是伸缩系数 。beta是加到结果上的一个值 。结果返回uint8类型的图片#absX=cv2.convertScaleAbs(x)#转回uint8#absY=cv2.convertScaleAbs(y)
文章插图
文章插图
代码截图
在图像的读取中 。会存在一些噪噪声点 。如一些白噪声 。因此我们需要进行去噪操作
opencv4种去噪操作1.cv2.blur(均值滤波)2.cv2.boxfilter(方框滤波)3.cv2.Guassiannblur(进行高斯滤波)4.cv2.medianBlur(进行中值滤波)
1.cv2.blur(img,(3,3))进行均值滤波参数说明:img表示输入的图片 。(3,3)表示进行均值滤波的方框大小
2.cv2.boxfilter(img,-1,(3,3),normalize=True)表示进行方框滤波 。参数说明当normalize=True时 。与均值滤波结果相同 。normalize=False 。表示对加和后的结果不进行平均操作 。大于255的使用255表示
3.cv2.Guassianblur(img,(3,3),1)表示进行高斯滤波 。参数说明:1表示σ 。x表示与当前值得距离 。计算出的G(x)表示权重值
4.cv2.medianBlur(img,3)#中值滤波 。相当于将9个值进行排序 。取中值作为当前值参数说明:img表示当前的图片 。3表示当前的方框尺寸
文章插图
文章插图
阈值处理(cv2.threshold) 后图片
opencv: 阈值处理(cv2.threshold)cv2.threshold(src,thresh,maxval,type)src:源图片 。必须是单通道thresh:阈值 。取值范围0~255maxval:填充色 。取值范围0~255type:阈值类型 。具体见下表
推荐阅读
- 全国9大服装批发市场在哪里?
- 在农村的镇上有两间门面,镇上流动人口少,不知道适合开什么店?
- 哪里批发服装最便宜?有何推荐?
- 纯音乐排行榜前100首 好听的纯音乐排行榜
- 手头有5万块钱,在乡镇上可以做什么生意?
- 温暖唯美的励志的短文案句子 励志的文案句子经典语句
- 农村乡镇摆摊做什么生意好?
- 想卖品牌服装去哪里批发?
- 皇室战争幽灵卡组,皇室战争六级竞技场哪个卡组较好