删除条形码下的数字并在 python 中写入文本 3
Remove number under barcode and write text in python 3
我试图用产品信息生成一些条形码(使用 python-barcode)我成功生成了条形码但没有删除代码下的内容并编写我自己的文本
我的代码:
import barcode
from barcode.writer import ImageWriter
barCode = "00000016901011900000"
barCodeImage = barcode.get('Code128', barCode, writer=ImageWriter())
barCodeImage.save("one")
这给了我这个条形码
但是我想删除条形码下显示的数字并写一些文本(作为产品信息或名称)
这是使用 OpenCV 的方法
- 将图像转换为灰度
- 大津获取二值图像的阈值
- 扩张以连接轮廓
- 使用轮廓区域查找轮廓并过滤
- 用所需文本替换 ROI
转成灰度后,我们Otsu的阈值得到二值图像
现在我们扩大以连接等高线
从这里我们找到轮廓并使用轮廓区域进行排序。较小的轮廓将是数字的投资回报率。这是检测到的数字 ROI
现在我们 "erase" 通过在 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)
我试图用产品信息生成一些条形码(使用 python-barcode)我成功生成了条形码但没有删除代码下的内容并编写我自己的文本
我的代码:
import barcode
from barcode.writer import ImageWriter
barCode = "00000016901011900000"
barCodeImage = barcode.get('Code128', barCode, writer=ImageWriter())
barCodeImage.save("one")
这给了我这个条形码
但是我想删除条形码下显示的数字并写一些文本(作为产品信息或名称)
这是使用 OpenCV 的方法
- 将图像转换为灰度
- 大津获取二值图像的阈值
- 扩张以连接轮廓
- 使用轮廓区域查找轮廓并过滤
- 用所需文本替换 ROI
转成灰度后,我们Otsu的阈值得到二值图像
现在我们扩大以连接等高线
从这里我们找到轮廓并使用轮廓区域进行排序。较小的轮廓将是数字的投资回报率。这是检测到的数字 ROI
现在我们 "erase" 通过在 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)