用了一下午时间,清洗出了条形码图片中的数据
Python代码
环境:
opencv-python
numpy
matplotlib
pytorch (只是用来调试时绘图的,可以不用)
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import time
import torch as tc
import torchvision as tv
from torch import nn, optim
from torchvision import transforms as T
from torch.nn import functional as F
from torchvision.utils import make_grid
from torch.utils.data import Dataset, DataLoader
from torch.nn import init
import xml.etree.ElementTree as ET
import cv2 as cv
def derv1d(ar):
"""一阶求导"""
tmp = np.insert(ar, ar.size, 0)
return tmp[1:] - ar
def get_projection(img, axis=1, kernel=(3, 200), drop_max=False, drop_min=False):
"""
对图像进行投影,并返回分割位置
axis: 在什么方向上投影
kernel: 腐蚀核大小
drop_max: 是否丢弃最大的图像(比如中心的条形码)
drop_min: 是否丢弃最小的图像(比如某条无用的线)
return: N个分割后的结果,即 [ N * clip-position ]
"""
# 阈值化图像区域
erode_kernel = np.ones(kernel)
erode_img = cv.erode(img, erode_kernel) # 腐蚀
proj = erode_img.sum(axis=axis).astype(np.float) # 投影
proj = (proj - proj.mean()) / proj.std()