【python】OpenCV—European Article Number

在这里插入图片描述

参考学习来自:OpenCV基础(25)条码和二维码扫的生成与识别

1 条形码介绍

EAN-13是欧洲物品编码(European Article Number)的缩写,是一种广泛使用的条形码标准,特别是在超级市场和其它零售业中。以下是对EAN-13条形码的详细介绍:

一、基本信息

  • 名称:EAN-13

  • 全称:European Article Number

  • 定义:一种用于表示终端产品信息的条形码协议和标准,由13位数字组成。

二、编码规则

  • 国家代码:前3位数字表示国家代码,由国际商品条码总会授权。在 CN,可用的国家代码为690-699,其中696-699尚未使用。

  • 厂商代码:接下来的4位数字表示厂商代码,由国家商品条码策进会核发给申请厂商。

  • 产品代码:再接下来的5位数字表示产品代码,由厂商自由编定。

  • 校验符:最后1位数字是校验符,用于检验前面12个数字的正确性。

三、校验符的计算方法

  • 将12个数据符从左起将所有的奇数位相加得出一个数a。

  • 将所有的偶数位相加得出一个数b。

  • 将数b乘以3再与a相加得到数c。

  • 用10减去数c的个位数,如果结果不为10则检验符为结果本身,如果为10则检验符为0。

2 条形码生成

from pystrich.ean13 import EAN13Encoder

# pip install pystrich
encode = EAN13Encoder('123456789123')
encode.save('pystrich.png')

在这里插入图片描述

# pip install python-barcode
from barcode.writer import ImageWriter
from barcode.ean import EuropeanArticleNumber13

ean = EuropeanArticleNumber13("123456789123", writer=ImageWriter())
ean.save("barcode")

会默认保存为 barcode.png
在这里插入图片描述

3 条形码检测

from __future__ import print_function
import pyzbar.pyzbar as pyzbar
import numpy as np
import cv2


def decode(im):
    # 查找条形码和二维码
    decodedObjects = pyzbar.decode(im)

    # 打印结果
    for obj in decodedObjects:
        print('Type : ', obj.type)
        print('Data : ', obj.data, '\n')

    return decodedObjects


# 显示条码和二维码位置
def display(im, decodedObjects):
    # 遍历所有解码对象
    for decodedObject in decodedObjects:
        points = decodedObject.polygon

        # 如果点不形成四边形,请找到凸包
        if len(points) > 4:
            hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
            hull = list(map(tuple, np.squeeze(hull)))
        else:
            hull = points

        # 凸包中的点数
        n = len(hull)
        hull = [(int(x), int(y)) for x, y in hull]
        # 绘制凸包
        for j in range(0, n):
            cv2.line(im, hull[j], hull[(j + 1) % n], (255, 0, 0), 3)

    # 显示结果
    cv2.imwrite("Result.jpg", im)
    cv2.imshow("Results", im)
    cv2.waitKey(0)


# 主函数
if __name__ == '__main__':
    # 读取图片
    im = cv2.imread('barcode.png')
    # im = cv2.imread('pystrich.png')

    decodedObjects = decode(im)
    display(im, decodedObjects)

output

Type :  EAN13
Data :  b'1234567891231' 

在这里插入图片描述

output

Type :  EAN13
Data :  b'1234567891231' 

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 10:40:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 10:40:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 10:40:01       62 阅读
  4. Python语言-面向对象

    2024-07-15 10:40:01       72 阅读

热门阅读

  1. day2 上下文Context

    2024-07-15 10:40:01       24 阅读
  2. 重学PyTorch,粗略笔记(一)

    2024-07-15 10:40:01       24 阅读
  3. 序列标注任务 - CRF条件随机场

    2024-07-15 10:40:01       19 阅读
  4. Python 字典(Dict)详解与实战应用

    2024-07-15 10:40:01       23 阅读
  5. 翁恺-C语言程序设计-07-3. 数素数

    2024-07-15 10:40:01       25 阅读
  6. [C++]this指针

    2024-07-15 10:40:01       25 阅读
  7. [C++]位图+布隆过滤器

    2024-07-15 10:40:01       26 阅读
  8. GESP CCF C++ 五级认证真题 2024年6月

    2024-07-15 10:40:01       30 阅读
  9. 使用Python实现携程并发处理

    2024-07-15 10:40:01       27 阅读