[英]How to read pdf images as opencv images using PyMuPDF?
我想閱讀opencv
在pdf
文件中找到的所有圖像作為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
將圖像信息存儲為字節。 使用numpy
的frombuffer
,可以從這些字節進行相應的整形后得到圖像數組。
pix.height
和pix.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.