为什么使用cv2.imread从pdf文件读取Wand创建的图像,对于所有RGB返回全部255?

时间:2019-04-03 22:48:39

标签: python opencv wand

我正在尝试识别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)

,它将所有文本返回给我...

2 个答案:

答案 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中使用它