使用 Python 如何提取图像和图像边界框坐标?

6
我正在尝试提取PDF中的图片,并获取图像的BBox坐标。
我尝试使用pdfrw库,它可以识别图像对象,并具有名为media box的属性,其中包含一些坐标。但是,对于某些PDF文件,它显示了类似于['0','0','684','864']的内容,但是图像并不从页面的开头开始,因此我不认为这是BBox坐标。
我尝试使用以下代码来使用pdfrw:
import pdfrw, os
from pdfrw import PdfReader, PdfWriter
from pdfrw.findobjs import page_per_xobj
outfn = 'extract.' + os.path.basename(path)
pages = list(page_per_xobj(PdfReader(path).pages, margin=0.5*72))
writer = PdfWriter(outfn)
writer.addpages(pages)
writer.write()

如何获取图像及其边界框坐标?

示例PDF:https://drive.google.com/open?id=1IVbj1b3JfmSv_BJvGUqYvAPVl3FwC2A-

1个回答

12
我发现一种通过名为 pdfplumber 的库来实现的方法。它是在 pdfminer 的基础上构建的,并在我的使用案例中始终可靠。此外,它还是 MIT 许可的,因此对我的办公工作非常有帮助。
    import pdfplumber

    pdf_obj = pdfplumber.open(doc_path)
    page = pdf_obj.pages[page_no]
    images_in_page = page.images
    page_height = page.height
    image = images_in_page[0] # assuming images_in_page has at least one element, only for understanding purpose. 
    image_bbox = (image['x0'], page_height - image['y1'], image['x1'], page_height - image['y0'])
    cropped_page = page.crop(image_bbox)
    image_obj = cropped_page.to_image(resolution=400)
    image_obj.save(path_to_save_image)

    

在我的情况下,对于表格和图片效果很好。


1
在您的代码中,image_bbox 应该放在一个循环内,类似于以下形式: for image in images_in_page: image_bbox = (image['x0'], page_height - image['y1'], image['x1'], page_height - image['y0']) - bherto39
1
你说得对,我本来想把它通用化但是漏掉了,谢谢纠正。 - Satyaaditya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接