前言

这周和大家分享如何用python识别图像里的条码。用到的库可以是zbar。希望西瓜6辛苦码的代码不要被盗了。(zxing的话,我一直没有装好,等装好之后再写一篇)

具体步骤

前期准备

用opencv去读取图片,用pip进行安装。

pip install opencv-python

所用到的图片就是这个

使用pyzbar

windows的安装方法是

pip install pyzbar

而mac的话,最好用brew来安装。

(有可能直接就好,也有可能很麻烦)

装好之后就是读取图片,识别条码。

代码如下

import cv2

import pyzbar.pyzbar as pyzbar

image=cv2.imread("/Users/phoenix/Downloads/barcode.png")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

texts = pyzbar.decode(gray)

for text in texts:

tt = text.data.decode("utf-8")

print(tt)

结果如图:

特殊情况处理(条码图片矫正和增强)

只以pyzbar举例

条码是颠倒的是否会影响识别?

不影响,单纯颠倒180度和90度是不会影响识别的。

我们把上一个图的颠倒180度,用颠倒后的图试一下

import cv2

import pyzbar.pyzbar as pyzbar

import numpy as np

image=cv2.imread("/Users/phoenix/Downloads/barcode_180.png")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

texts = pyzbar.decode(gray)

print(texts)

if texts==[]:

print("未识别成功")

else:

for text in texts:

tt = text.data.decode("utf-8")

print("识别成功")

print(tt)

结果如图

90度的话也是同样可以成功的。但是其它角度就会GG。

条码是倾斜的是否会影响识别?

会的,但这种还比较好处理。

如图

这张图用上面的代码就会

解决的思路是把这个图片旋转回来,至于如何判断转多少度,可以通过opencv来处理。通过膨胀和腐蚀将其变为如图。

接着再用cv2.minAreaRect函数,这个函数会返回如下,

里面的第三个-45就是我们需要的角度。

综合起来的实现代码,我就放在下面了。(我自己写的,如果有帮到你,快点关注和赞)

import cv2

import pyzbar.pyzbar as pyzbar

import numpy as np

def barcode(gray):

texts = pyzbar.decode(gray)

if texts == []:

angle = barcode_angle(gray)

if angle < -45:

angle = -90 - angle

texts = bar(gray, angle)

if texts == []:

gray = np.uint8(np.clip((1.1 * gray + 10), 0, 255))

angle = barcode_angle(gray)

#西瓜6写的,转载需声明

if angle < -45:

angle = -90 - angle

texts = bar(gray, angle)

return texts

def bar(image, angle):

gray = image

#西瓜6写的,转载需声明

bar = rotate_bound(gray, 0 - angle)

roi = cv2.cvtColor(bar, cv2.COLOR_BGR2RGB)

texts = pyzbar.decode(roi)

return texts

def barcode_angle(image):

gray = image

#西瓜6写的,转载需声明

ret, binary = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY_INV)

kernel = np.ones((8, 8), np.uint8)

dilation = cv2.dilate(binary, kernel, iterations=1)

erosion = cv2.erode(dilation, kernel, iterations=1)

erosion = cv2.erode(erosion, kernel, iterations=1)

erosion = cv2.erode(erosion, kernel, iterations=1)

contours, hierarchy = cv2.findContours(

erosion, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

if len(contours) == 0:

rect = [0, 0, 0]

else:

rect = cv2.minAreaRect(contours[0])

return rect[2]

def rotate_bound(image, angle):

(h, w) = image.shape[:2]

(cX, cY) = (w // 2, h // 2)

M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)

cos = np.abs(M[0, 0])

sin = np.abs(M[0, 1])

#西瓜6写的,转载需声明

nW = int((h * sin) + (w * cos))

nH = int((h * cos) + (w * sin))

M[0, 2] += (nW / 2) - cX

M[1, 2] += (nH / 2) - cY

return cv2.warpAffine(image, M, (nW, nH))

image=cv2.imread("/Users/phoenix/Downloads/barcode_455.png")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

texts = barcode(gray)

print(texts)

if texts==[]:

print("未识别成功")

else:

for text in texts:

tt = text.data.decode("utf-8")

print("识别成功")

print(tt)

条码是模糊的是否会影响识别?

会的,处理方法就是传统的调对比度,锐化。。。。

不过这个只能解决部分部分,至于有的条码,微信可以扫,支付宝可以扫,但是我们识别不了,这个也不能怪库不好,这部分该放弃就放弃吧。

结束语

如果你想用python来解决图像里的条码识别问题,这篇文章肯定是可以帮到你的。到此这篇关于详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强的文章就介绍到这了,更多相关python识别图片条码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...相关推荐

  1. 利用python处理dna序列_详解基于python的全局与局部序列比对的实现(DNA)

    程序能实现什么 a.完成gap值的自定义输入以及两条需比对序列的输入 b.完成得分矩阵的计算及输出 c.输出序列比对结果 d.使用matplotlib对得分矩阵路径的绘制 一.实现步骤 1.用户输入步 ...

  2. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  3. 用python写管理系统局域网_详解用python -m http.server搭一个简易的本地局域网

    工作时同事间几mb小文件的传输,一般使用QQ或者微信就足够了,但当传输文件几百MB或者几十G时,这种方法的效率就显得不足了.本篇就是简单说明一个python小功能,让大家能利用python方便的搭建一 ...

  4. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

  5. python登录系统文件版_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是存储到文件里,一个是存储到数据库中,存储到数据库中的版本会后 ...

  6. python 写入excel 日期_详解:Python实现大数据收集至excel的思路大牛分享(建议收藏)...

    一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...

  7. python对excel筛选提取文本中数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  8. python提取pdf的数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  9. python微博评论爬虫_详解用python写网络爬虫-爬取新浪微博评论 基于Python的新浪微博爬虫研究...

    怎样爬取新浪微博的评论信息 针对八爪鱼在微博的应用上,除了用户信息之外还包括话题内容方面的采集,目前绝大多数企业均在微博设有官方微博,八爪鱼可以协助企业快速及时的抓取与企业产品相关联的话题信息,规则市 ...

最新文章

  1. python3读取excel数据-【Python3学习系列】——Python读取Excel
  2. 普中开发仪 HC6800EM3-v22光盘资料
  3. 数据挖掘系列(3)--关联规则评价
  4. 最简单易懂的对拍讲解
  5. springcloud config服务端配置(二)
  6. mysql 2003 10038_关于MySql10038错误的完美解决方法(三种)
  7. Apache HTTP服务器 2.0版本文档
  8. java生成小程序二维码
  9. PICKIT3 programmer下载地址
  10. Linux内核配置文件
  11. 简易 shell 爬搜狐
  12. Firefox浏览器-渗透测试插件推荐
  13. 织梦后台内容模型使用教程
  14. ​Python 中的数字到底是什么?
  15. 使用预先训练好的单词向量识别影评的正负能量
  16. 峰度和偏度的计算方法偏度的处理
  17. iOS 内购StoreKit 框架介绍
  18. FileNotFoundError: [Errno 2] No such file or directory: stu. txt '
  19. 同济大学软件学院万院长谈泽业
  20. CentOs 安装vlc播放器

热门文章

  1. _kbhit()以及_getch()函数的用法
  2. 英语学习资料下载大全
  3. 单片机外围电路设计攻略(全)!
  4. split使用总结,被坑的正则特殊符号:*/+
  5. matlab 自动生成陷波滤波器算法实现
  6. win10系统禁用笔记本自带键盘
  7. 东南大学计算机学院健在院士,【缅怀】顾冠群院士逝去,计算机界痛失泰斗
  8. CPU大小端模式对C语言底层开发的影响
  9. JMeter - REST API测试 - 完整的数据驱动方法(翻译)
  10. 图割-最大流最小切割的最直白解读