1

我一直在用 python 对图像进行 OCR 处理,但仍有改进的余地,因此您的输入和想法会有所帮助。

这就是我目前正在做的事情,成功获得有效 ocrText 输出的比例约为 15%。

ocrImage = cv2.imread(imgName)
ocrImage  = cv2.resize(ocrImage, None, fx=3, fy=3, interpolation=cv2.INTER_LINEAR)  # enlarge 3 times
ocrImage = cv2.cvtColor(ocrImage, cv2.COLOR_BGR2GRAY)  # turn into gray
ret,ocrImage = cv2.threshold(ocrImage,127,255,cv2.THRESH_BINARY)  # conver to balck and white
ocrImage = cv2.morphologyEx(ocrImage, cv2.MORPH_OPEN, np.ones((4,4),np.uint8))  # eliminate the noice 
ocrImage = cv2.morphologyEx(ocrImage, cv2.MORPH_CLOSE, np.ones((4,4),np.uint8))  # make supplement in white dots
cv2.imwrite(ImageName, ocrImage)
ocrText = ocrTool.image_to_string(Image.open(ImageName), builder=pyocr.builders.TextBuilder())

当我试图取得进展时,我发现了一个“opencv-color-spaces”博客,它使用下面的代码将图像的像素绘制成 3d 模型。我可以看到所有背景噪音都是不同的灰色,并且几乎在某个区域内。我觉得这可以帮助我在代码中执行之前将它们过滤掉,但我不知道该怎么做。

nemo0 = cv2.imread(ImageName1,1)
nemo1 = cv2.cvtColor(nemo0, cv2.COLOR_BGR2RGB)
r, g, b = cv2.split(nemo1)
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")
pixel_colors = nemo1.reshape((np.shape(nemo1)[0] * np.shape(nemo1)[1], 3))
norm = colors.Normalize(vmin=-1.0, vmax=1.0)
norm.autoscale(pixel_colors)
pixel_colors = norm(pixel_colors).tolist()
axis.scatter(r.flatten(), g.flatten(), b.flatten(), facecolors=pixel_colors, marker=".")
axis.set_xlabel("Red")
axis.set_ylabel("Green")
axis.set_zlabel("Blue")
currentFig1 = plt.gcf()
currentFig1.savefig(ImageName1.replace(Path, pltPath))

如果您可以给我一些输入,我想寻求帮助,是否有一个功能并做得更快或一些代码并在我继续处理图像之前快速删除灰线?

示例图像在此处的链接中

4

0 回答 0