簡體   English   中英

如何使用 PyMuPDF 將 pdf 圖像讀取為 opencv 圖像?

[英]How to read pdf images as opencv images using PyMuPDF?

我想閱讀opencvpdf文件中找到的所有圖像作為PyMuPDF圖像,盡可能接近源(避免會導致精度損失的時髦格式轉換)。 基本上,我希望結果與執行cv2.imread(filename):時完全相同:(就其輸出的類型、色彩空間等而言...)

# Libraries
import os
import cv2
import fitz
import numpy as np

# Input file
filename = "myfile.pdf"

# Read all images in file as a list of opencv images
def read_images(filename):
    images = []:
    _, extension = os.path.splitext(filename)
    # If it's a pdf process each image
    if (extension == ".pdf"):
        pdf = fitz.open(file)
        for index in range(len(pdf)):
            page = pdf[index]
            for im in page.getImageList():
                xref = im[0]
                pix = fitz.Pixmap(pdf, xref)
                images.append(pix_to_opencv_image(pix)) # DO SOMETHING HERE
    # Otherwise just do an imread 
    else:
        images.append(cv2.imread(filename))
    return images

基本上我想知道 function pix_to_opencv_image應該是什么:

# Equivalent of doing a "cv2.imread" on a pdf pixmap:
def pix_to_opencv_image(pix):
    # DO SOMETHING HERE

如果找到解釋如何將 pdf 像素圖轉換為 numpy arrays 的示例,但沒有輸出 Z942756EA97E39DE518E 圖像。

我怎樣才能做到這一點?

我使用help() function 來查找與之相關的各種數據描述符--> help(pix)

pix.samples將圖像信息存儲為字節。 使用numpyfrombuffer ,可以從這些字節進行相應的整形后得到圖像數組。

pix.heightpix.width給出圖像數組的高度和寬度。 pix.n是通道數。 這些可用於重塑結果數組。

您完整的 function 將是:

def pix_to_image(pix):
    bytes = np.frombuffer(pix.samples, dtype=np.uint8)
    img = bytes.reshape(pix.height, pix.width, pix.n)
    return img

您可以使用cv2.imshow()顯示結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM