将Python Path对象传递给OpenCV的imread
或imwrite
会导致一个未定义的错误:
from pathlib import Path
import cv2
img_path = Path("test.png")
img = cv2.imread(img_path)
结果:
Traceback (most recent call last):
File ".secondary_image_generation.py", line 36, in <module>
img = cv2.imread(img_path)
SystemError: <built-in function imread> returned NULL without setting an error
为什么会这样,我该如何避免?
OpenCV库源代码是用c++编写的,Python绑定主要是自动生成的,除了包装c++函数之外没有做更多的事情。c++函数需要字符串类型的文件名,所以你也必须提供给Python函数。
通过解析完整路径并将其转换为字符串,执行以下操作可以解决此问题:
img_path = Path("test.png")
img = cv2.imread(str(img_path.resolve()))
对于当前版本的OpenCV,这仍然是一个开放的特性请求。