我正在尝试识别pdf文件中的文本斑点。举例来说,例如,学术论文中有不同的部分,我想将标题标识为一个部分,将作者和地址标识为一个部分,将摘要标识为一个部分。
我正在考虑的一种解决方案是使用cv2。我首先使用Wand使用以下代码将pdf转换为图像:
M
但是,当我尝试使用以下命令在cv2中打开jpg文件时:
from wand.color import Color
from wand.image import Image as Img
with Img(filename='./files/paper.pdf', resolution=300) as img:
img.background_color = Color("white")
img.alpha_channel = 'remove'
img.save(filename='test_file.jpg')
打印输出显示该图像中所有像素的所有值均为255。
image = cv2.imread('test_file.jpg')
print image
然后,当我想使用cv2.dnn.blobFromImage()时,它将无法正确处理。
这是怎么回事?是因为pdf无法正确转换为图像吗?但是我尝试过
array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
...,
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]]], dtype=uint8)
,它将所有文本返回给我...
答案 0 :(得分:0)
看到所有的点?图像的打印仅显示图像的几个像素。假设您有一个带有白色背景的pdf文本文档,可以安全地假设所有边缘像素都是白色。打印件通常会向您显示图像的各个角落。
要显示图像,请使用
image = cv2.imread('test_file.jpg')
cv2.imshow('Image', image)
cv2.waitKey(0)
这将在一个窗口中显示图像,并等待您按一个键才消失。
答案 1 :(得分:0)
棒图像不是numpy数组,因此不能简单地在cv2中打开。在Wand 5.3中,将有一种方法可以在numpy数组之间导入和导出Wand图像。
在Wand 5.2中,可以使用import_pixels将numpy数组转换为Wand图像。在Wand 5.2中,可以将Wand图像导出到应在cv2中使用的numpy数组。
import numpy as np
from wand.image import Image
with Image(filename='rose.png') as img:
matrix = np.array(img)
矩阵将是一个numpy数组,您应该可以在OpenCV中使用它