Использование OpenCV imread и imwrite с объектами пути Python дает системную ошибку: возвращает значение NULL без установки ошибки

#python #opencv

Вопрос:

Передача объекта пути Python в 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
 

Почему это так и как я могу этого избежать?

Ответ №1:

Источники библиотеки OpenCV написаны на C , а привязки Python в основном создаются автоматически и не выполняют ничего, кроме обертывания функций C . Функции C ожидают имена файлов строкового типа, поэтому это то, что вы также должны предоставить функциям Python.

Выполнение следующих действий устраняет проблему, разрешая полный путь и преобразуя его в строку:

 img_path = Path("test.png")
img = cv2.imread(str(img_path.resolve()))
 

Это все еще открытый запрос функций для текущей версии OpenCV.