利用python识别图片中的条码(pyzbar)

目录

  • 利用python识别图片中的条码(pyzbar)
    • 前言
    • 具体步骤
      • 前期准备
      • 使用pyzbar
    • 特殊情况处理(条码图片矫正和增强)
      • 条码是颠倒的是否会影响识别?
      • 条码是倾斜的是否会影响识别?
      • 条码是模糊的是否会影响识别?
    • 结束语

前言

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

具体步骤

前期准备

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

pip install opencv-python

所用到的图片就是这个

使用pyzbar

windows的安装方法是

pip install pyzbar

而mac的话,最好用brew来安装。
(有可能直接就好,也有可能很麻烦)
装好之后就是读取图片,识别条码。
代码如下

import cv2
import pyzbar.pyzbar as pyzbarimage=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 npimage=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 npdef barcode(gray):texts = pyzbar.decode(gray)if texts == []:angle = barcode_angle(gray)if angle < -45:angle = -90 - angletexts = 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 - angletexts = bar(gray, angle)return textsdef bar(image, angle):gray = image#西瓜6写的,转载需声明bar = rotate_bound(gray, 0 - angle)roi = cv2.cvtColor(bar, cv2.COLOR_BGR2RGB)texts = pyzbar.decode(roi)return textsdef 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) - cXM[1, 2] += (nH / 2) - cYreturn 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)及条码图片矫正和增强相关推荐

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

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

  2. python识别图片文字_如何利用Python识别图片中的文字

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...

  3. 利用python识别图片中的条码及条码图片矫正和增强!

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

  4. 如何使用Python识别图片中的二维码

    如何使用Python识别图片中的二维码 二维码是一种方便快捷的信息传递方式,它们广泛应用于电子商务.广告和其他领域.在许多情况下,我们需要识别图片中的二维码,以便从中获取信息.Python是一种流行的 ...

  5. 利用python识别身份证号后获取年龄和性别信息

    利用python识别身份证号后获取年龄和性别信息 1. 实验目的 利用python识别身份证号后,从身份证号中获取年龄和性别信息 2. 主代码 1. 身份证号码识别 # !/usr/bin/pytho ...

  6. 如何用Python识别图片中的文字?

    如何用Python识别图片中的文字? 转:https://mp.weixin.qq.com/s/wXDJoAAI8y1mtbUuwATngQ 以下文章来源于微信公众号:新建文件夹X ,作者ZackSo ...

  7. python 识别图片中的中文_python识别图片中文字的方法

    Tesseract 文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别.Tesseract是一个用于文字识别的工具,我们结合Python使用可以很快的实现文字识别.但是在此之 ...

  8. python 识别图片中的中文_Python中利用Tesseract软件来识别图片中的英文与中文

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...

  9. 【Python】利用 pytesseract 识别图片中的数字

    文章目录 Win 平台 使用步骤 问题解决 Ref: Win 平台 使用步骤 一.安装包. 二.找个图片,运行如下识别程序. 示例程序: import pytesseract from PIL imp ...

最新文章

  1. AD5933使用外部时钟获得更低的分析频率
  2. mvc php session,PHP Session入门教程
  3. DPM(Deformable Parts Models)-----目标检测算法理解
  4. Redis高可用方案-哨兵模式-SpringBoot整合
  5. CodeForces - 1562D2 Two Hundred Twenty One (hard version)(二分)
  6. 【ArcGIS风暴】ArcGIS自定义坐标系统案例教程---以阿尔伯斯投影(Albers)为例
  7. python opencv把32位的灰度图变成8位的灰度图_python简单换脸程序
  8. 解决tshark报错:tshark: Some fields aren‘t valid
  9. 工作中遇到很让人头疼的上司怎么办?
  10. 发生服务器错误 显示预览,我的电脑为何在做asp的时候按F12键不能预览!预览就出错!错误代码500说服务器或者DNS错误...
  11. 计算机二级java技巧,计算机二级java难学吗
  12. 什么叫做罗列式_申论作文写作之案例罗列式开头
  13. 将数组升序排列后,插入一个数,仍然保持升序排列。
  14. 基于51单片机的数字时钟(万年历)
  15. 在Linux和Windows上安装kafka(版本:2.12-2.8.0)
  16. Cocos2d-x初级篇之工程的创建和编译(windows环境)
  17. Oracle数据库的数据备份
  18. Win10默认输入法切换中英文标点
  19. 自己编一个大乐透选号器
  20. w10 保护你的计算机,win10smartscreen筛选器怎么关闭-“windows已保护你的电脑”的关闭方法 - 河东软件园...

热门文章

  1. 公司注册流程及税务相关知识整理
  2. java keydown事件_正确的方法来阻止keydown事件冒泡
  3. python fig.colorbar_python3 matplotlib自定义colorbar颜色条
  4. 由高通8295车规级芯片算力TOPS想起车载常用嵌入式系统的TOPS
  5. 西双版纳的春节什么样?
  6. Linux 安装 miniconda
  7. 小学期-中期总结报告
  8. new InitialContext() 创建ejb实例的过程
  9. 订货订单管理系统架构介绍视频
  10. 2021最新PHP域名防封系统源码4.0+后台管理功能+个人免签支付接口网站源码