Rob*_*mer 2 pdf opencv python-3.x
是否有原生支持从PDF抓取图像或在Python中创建某种对象,该对象可以包含pdf图像,然后可以通过OpenCV访问?我看过一些脚本,可将PDF的图像转储到我的目录中,但我的目标是访问PDF,而不是将PDF中的数据(即图像)转储到我可以访问的某种对象中与OpenCV。我自己的探索没有产生任何结果,所以我想问一下。
添加了一个基于@Ghilas BELHADJ的使用PyMuPDF的示例
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)
Run Code Online (Sandbox Code Playgroud)
编辑:在@DanMaš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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |