python中如何实现某些库函数转换结果内存的相互读取

比如我用cv2.resize得到一个内存结果result
img=cv2.imread("c:\1.jpg")
result=cv2.resize(img, (100,100))
现在我需要用到别的库比如PyMuPDF里的打开文档
doc = fitz.open(result)
会报错
我看了PyMuPDF的说明文档,fitz.open这个函数是可以直接读取内存数据的,但是当我直接用fitz.open(result)来打开上面cv2.resize修改好的图片的时候,是会报错的。请问怎么解决这个问题?难道一定要先保存硬盘再从硬盘读取文件路径。


import cv2
import fitz
from io import BytesIO

# 读取图像并进行大小调整
img = cv2.imread("c:\1.jpg")
result = cv2.resize(img, (100, 100))

# 将结果内存转换为内存缓冲区对象
buffer = BytesIO()
buffer.write(cv2.imencode('.jpg', result)[1].tobytes())
buffer.seek(0)  # 将光标重新定位到缓冲区的开头

# 使用PyMuPDF打开内存缓冲区中的图像
doc = fitz.open("pdf", buffer.read())

# 对文档进行操作
# ...

# 关闭文档和缓冲区
doc.close()
buffer.close()

在使用完毕后,记得关闭打开的文档和内存缓冲区,以释放相关资源。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

问题的关键在于cv2.resize函数的结果是一个numpy数组,而PyMuPDF的fitz.open函数需要接收一个文件路径作为参数,而不是一个内存结果。

解决这个问题的方法是将cv2.resize函数的结果保存为临时文件,然后再使用fitz.open函数打开这个临时文件。具体步骤如下:

  1. 使用cv2.imencode函数将numpy数组转换为bytes对象,并将其保存到临时文件:

```python import cv2 import tempfile

img = cv2.imread("c:\1.jpg") result = cv2.resize(img, (100,100))

_, buffer = cv2.imencode('.jpg', result)

temp_file = tempfile.NamedTemporaryFile(suffix=".jpg") temp_file.write(buffer) temp_path = temp_file.name temp_file.close() ```

这样,temp_path变量中存储了临时文件的路径。

  1. 使用fitz.open函数打开临时文件:

```python import fitz

doc = fitz.open(temp_path) ```

这样就可以成功打开经过cv2.resize修改的图片了。

  1. 最后记得在使用完图片后将临时文件删除:

```python import os

os.remove(temp_path) ```

这样就解决了问题,并且避免了将结果保存到硬盘上再从硬盘读取的过程,直接在内存中进行操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^