Python实现识别多个条码/二维码(二)
这篇博客实现的是“Python实现识别多个条码/二维码(一)”未完成的解码任务。由于系统坏了,软件重装等一系列原因,所以拖到现在。。不好意思哈。
在上一篇中我们已经能把两个条形码找出并框起来了,接下来就是要解码。先上代码吧。
from sys import exit
from Image import _ImageCrop
from PIL import Image
import numpy as np
import zbar
import cv2# 加载图片并把它转换为灰度图片
image = cv2.imread('F:/work/barcode/bar_code/20.jpg')
img = Image.open(r'F:/work/barcode/bar_code/20.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#cv2.imshow("sobel_Image", gray)
#cv2.waitKey(0)
#使用Canny做边缘检测
gradient = cv2.Canny(gray , 20 ,520)
#cv2.imshow("Canny_Image", gradient)
#cv2.waitKey(0)(_, thresh) = cv2.threshold(gradient, 225, 255, cv2.THRESH_BINARY) # 二值化
cv2.imshow("threshold_Image", thresh)
#cv2.waitKey(0)
# 构建kernel然后应用到 thresholded 图像上
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 5))#形态学处理,定义矩形结构
closed = cv2.dilate(thresh, kernel, iterations = 1)#膨胀图像,连接断点
#cv2.imshow("dilate_Image", closed)
#cv2.waitKey(0)im, contours, hierarchy = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#print contours
x = len(contours)
a = []
s = []#打印面积
for i in range(0,x):s.append(cv2.contourArea(contours[i]))#保留面积大于8000的轮廓
for m in range(0,x):if s[m] >= 8000 and s[m] <= 25000 :a.append(s[m])else:continuez = max(a)#for j in a:
# print "a was : %f",jfor k in range(0,x):#增加一些筛选条件if s[k] >= 8000 and s[k] <= 25000 and ((z - s[k]) <= 8500 ) :rect = cv2.minAreaRect(contours[k])#返回矩形的中心点坐标,长宽,旋转角度box = np.int0(cv2.boxPoints(rect))cv2.drawContours(image, [box], -1, (255, 0, 0), 2)#画一个方框把条形码区域圈起来u,v,w,t = cv2.boundingRect(contours[k]) #获取轮廓坐标#print u,v,w,t#根据坐标把条码裁剪下来并保存o = (u,v,u+w,v+t)barcode = img.crop(o)barcode.save(r'F:/work/barcode/bar_code/crop4.jpg')#print "s : %f",s[k]#构建解码器scanner = zbar.ImageScanner()scanner.parse_config('enable')pil = Image.open('F:/work/barcode/bar_code/crop4.jpg').convert('L')width, height = pil.size#解码raw = pil.tostring()image0 = zbar.Image(width, height, 'Y800', raw)scanner.scan(image0)for symbol in image0:print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.dataelse:continuecv2.imshow("Image", image)
cv2.waitKey(0)
exit(0)
找条码的程序与前文基本相同。解码的实现从获取轮廓坐标开始。其实就是我们把条码从原图上裁剪下来(这里先保存后打开是因为CV2与PIL的交替使用),然后用zabr工具包进行解码。
下面放上结果图
有朋友问我zbar的安装,确实不好找哈,所以这里放上链接~
密码:bhx6
Python实现识别多个条码/二维码(二)相关推荐
- python之有趣的二维码-----二维码表白记
" 如何使用二维码进行表白-一键制作二维码" 二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下----嘿嘿嘿--不行, ...
- 分享6:绘制二维码/二维条码(java版)
最近客户抽筋了,不想要我们现有的二维码,转而采用二维条码.(这之前二维码也不是我做的)既然是甲方bb提出的,老板又安排到到我手上了,那么我就得心(一)甘(脸)情(苦)愿(逼)的默默解决呗. 二维码/二 ...
- PHP批量生成底部带编号二维码(二维码生成+文字生成图片+图片拼接合并)
PHP批量生成带底部编号二维码(二维码生成+文字生成图片+图片拼接合并) 需求: 输入编号如 : cb05-0000001 至 cb05-0000500 批量生成 以编号为名称的下图二维码,然后压缩 ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)...
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- 灵猫二维码 - 二维码中间加图片的方法
正常生成的二维码都是不带图标的,但是很多时候我们都需要在二维码中间添加上我们自己的图标,这个时候我们就可以使用灵猫二维码来进行操作了! 使用教程: 1.打开灵猫二维码:http://lmewm.mai ...
- vue 在线生成二维码 二维码生成背景下载
安装 引用 3.注入 app.vue 这里只是生成二维码 生成二维码 js 这里是需要二维码 并且与另一张合成一张image的! 上代码
- 基于ZBar,OpenCV和Python的二维码识别
0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...
- 如何使用Python识别图片中的二维码
如何使用Python识别图片中的二维码 二维码是一种方便快捷的信息传递方式,它们广泛应用于电子商务.广告和其他领域.在许多情况下,我们需要识别图片中的二维码,以便从中获取信息.Python是一种流行的 ...
- 互联网 4 大发明之二维码,你如何使用 Python 生成二维码?
阅读文本大概需要 8 分钟. 新时代,人们有人信新的追求,自然而然会有新发明的诞生.去年,在"一带一路"国际合作高峰论坛举行期间, 20 国青年投票选出中国的"新四大发明 ...
- 讲解开源项目:用 Python 生成有“灵魂”的二维码
本文作者:HelloGitHub-LITTLECHIEH 这是 HelloGitHub 推出的<讲解开源项目>系列,今天给大家推荐一个 Python 开源生成二维码的项目--qrcode ...
最新文章
- 3详细参数_【前沿】一加7Pro拍照详细参数曝光 3倍光变30W快充
- 每天CookBook之JavaScript-016
- java 获取键盘输入法_Java中接收键盘输入的三种方法
- 多系统服务器数据备份软件,护卫神好备份系统
- spring组键扫描
- Node.js 把抓取到的电影节目列表单发或者群发到QQ邮箱
- linux中网卡的流量怎么通过c语言获取_用Python获取计算机网卡信息
- 可扩展的Web架构和分布式系统
- 1.oracle dblink(数据库不同实例数据对导)
- 测试网速wifi软件,测网速工具 一键wifi测速
- 国内IoT云平台横向对比
- 软件测试面试宝典【测试流程、数据库、Linux、测试工具、自动化、性能测试】
- 央行最新公布2019支付牌照持牌机构公司列表,共255家(附清单)
- 分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了
- 利用公网ip盒子搭建自己的kod云资源管理器
- 7天带你搞定一个图表框架echarts(七)
- 对公账户:企业银行结算账户
- 可视化系列讲解:css3D:如何绘制正方体,长方体等
- C# dll注入(指定进程注入指定dll)
- istio 实战 六 全链路监控 - Jaeger