Python & OpenCV - PullRequest
       13

Python & OpenCV

0 голосов
/ 30 октября 2018

Существуют ли какие-либо встроенные функции поддержки захвата изображений из PDF-файлов или создания какого-либо объекта в Python, который может содержать изображения из PDF-файла, к которым затем можно получить доступ через OpenCV? Я посмотрел на некоторые сценарии, чтобы выгрузить Изображения PDF в мой каталог, но я нацеливаюсь больше на доступ к PDF и вместо этого выкидываю данные из PDF, который является изображениями, в какой-то объект, к которому я могу получить доступ с OpenCV. Мое собственное исследование не дало никаких результатов, поэтому я решил спросить.

Добавлен пример использования PyMuPDF на основе примера из @Ghilas BELHADJ

import fitz
import cv2
import numpy as np
from tkinter import Tk
from tkinter.filedialog import askopenfilename


class AccessPDF:

    def __init__(self):
        self.filepath = ""
        self.doc = None

    def openPDF(self):
        Tk().withdraw()
        self.filepath = askopenfilename()
        self.doc = fitz.open(self.filepath)

    def pixel2np(self,pix):
        im = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.h, pix.w, pix.n)
        im = np.ascontiguousarray(im[..., [2, 1, 0]])  # rgb to bgr
        return im

    def displayKey(self):  
        pixobj = self.doc.getPagePixmap(0, alpha=False)
        im = self.pixel2np(pixobj)
        cv2.imwrite("testimg.png",im)
        cv2.imshow("Key" im)

1 Ответ

0 голосов
/ 30 октября 2018

Редактировать: я внес изменение в код после комментария @Dan Mašek

Этого можно достичь (загрузить PDF встроенные изображения в OpenCV без записи промежуточных объектов на диске), используя PyMuPDF и Numpy .

В этом примере я использую этот файл PDF .

import fitz
import cv2
import numpy as np


def pix2np(pix):
    im = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.h, pix.w, pix.n)
    im = np.ascontiguousarray(im[..., [2, 1, 0]])  # rgb to bgr
    return im


doc = fitz.open('NGM_2018_Media_Kit.pdf')

# entire page
# pix = doc.getPagePixmap(0, alpha=False)

# first page , 5th image, xref element
pix = fitz.Pixmap(doc, doc.getPageImageList(0)[4][0])  
im = pix2np(pix)

cv2.putText(im, 'Azul fellawen', (100, 100),
            cv2.FONT_HERSHEY_SIMPLEX, 1.,
            (18, 156, 243), 2, cv2.LINE_AA)
cv2.imwrite('sample_0.png', im)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...