Это, вероятно, одна из самых странных ошибок, с которыми я столкнулся при использовании OpenCV. Происходит много, поэтому позвольте мне попытаться объяснить это, насколько это возможно.
-
Я использую веб-фреймворк Django и OpenCV (cv2) вместе. Я пытаюсь прочитать файл с моего диска из представления в Django.
imagePath = os.path.dirname(__file__) + "/1.jpg"
В принципе, в том же пути, что и файл views.py, есть файл под названием "1.jpg". Это все, что делает этот код. Достаточно легко. Но следующий шаг - это то, где все становится сумасшедшим.
-
Теперь я хочу прочитать файл изображения, расположенный в 'imagePath'. Для этого требуется вызов cv2.imread
image = cv2.imread(imagePath)
Но это то, где начинаются мои проблемы. Как-то Apache (или, может быть, даже OpenCV, я не могу сказать) начинает висит, и файл никогда не загружается. Нет сообщения об ошибке, ничего нет.
Выполняя некоторые детективные работы, я решил попробовать старую версию OpenCV (импорт cv). Как ни странно, когда я вызываю cv.LoadImage(imagePath), Apache не зависает, и мое изображение загружается просто отлично. Я понятия не имею, почему.
Потенциальная работа для моей проблемы заключается в использовании PIL.
from PIL import Image
import numpy as np
image = Image.open(imagePath)
image = np.asarray(image)
Один раз, используя PIL Apache, он не зависает, и я могу нормально работать с моим изображением, представленным в виде массива numpy, и применять к нему любую из функций cv2.
Тем не менее, я не из тех, кто подходит к обходным решениям, и тот факт, что cv2.imread висит, действительно беспокоит меня.
Кто-нибудь сталкивался с этим раньше?
EDIT: использование cv.imread из оболочки Python отлично работает, это просто из запроса Apache, что происходит зависание.
>>> import cv2
>>> image = cv2.imread("1.jpg")
>>> image.shape
(400, 344, 3)
>>>