删除条形码下的数字并在python3中写入文本

2024-10-06 10:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用产品信息生成一些条形码(使用python-barcode),我成功地生成了条形码,但没有删除下面的代码并编写自己的文本

我的代码:

import barcode
from barcode.writer import ImageWriter

barCode = "00000016901011900000"
barCodeImage = barcode.get('Code128', barCode, writer=ImageWriter())
barCodeImage.save("one")

给了我这个条形码

enter image description here

但是我想删除条形码下面的显示数字,并写一些文字作为产品信息或名称


Tags: 代码from文本import信息get产品save
1条回答
网友
1楼 · 发布于 2024-10-06 10:31:13

下面是一个使用OpenCV的方法

  • 将图像转换为灰度
  • 大津阈值法获取二值图像
  • 扩张连接轮廓
  • 找到轮廓并使用轮廓区域进行过滤
  • 用所需文本替换ROI

在转换成灰度后,采用大津阈值法得到二值图像

现在我们扩张来连接轮廓

从这里我们找到轮廓和排序使用轮廓面积。较小的轮廓将是ROI的数目。这是检测到的数字

现在,我们通过在ROI中用白色着色来“擦除”数字,并用cv2.putText()来编写所需的文本。结果是这样的

import cv2

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray,0,255,cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
dilate = cv2.dilate(thresh, kernel, iterations=3)

cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea)

for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    image[y:y+h, x:x+w] = [255,255,255]
    cv2.putText(image, 'Super Spicy Example Text', (x,y), \
                cv2.FONT_HERSHEY_SIMPLEX, .6, (0,0,0), 1)
    break

cv2.imshow('thresh', thresh)
cv2.imshow('dilate', dilate)
cv2.imshow('image', image)
cv2.waitKey(0)

相关问题 更多 >