2012-03-28 3 views
10

С OpenCV 2, IPython теперь использует массивы NumPy по умолчанию. неПреобразование массива NumPy в cvMat cv2

cvimage = cv2.imread("image.png") #using OpenCV 2 
type(cvimage) 
Out: numpy.ndarray #dtype is uint8 

pltimage = plt.imread("image.png") #using Matplotlib 
type(pltimage) 
Out: numpy.ndarray #dtype is float 

plt.imshow(cvimage) # works great 

cv2.imshow(cvimage) 
TypeError: Required argument 'mat' (pos 2) not found 

Поскольку cv2 использует Numpy массивы по умолчанию, больше нет резюме :: Mat конструктора и NumPy не имеет функций для преобразования в cv::Mat массива.

Любые идеи?

+1

Да, на это уже был дан ответ - на самом деле вы не пропустили второй аргумент, но первый. Тем не менее, я пришел сюда с другой проблемой: не каждый «numpy.ndarray» типа 'uint8' может отображаться. Я сделал фрагмент, чтобы получить один канал изображения, например 'red = frame [:,:, 0]', а затем получил исключение в 'imshow'. Я подозреваю, что это из-за разреженности. 'red = frame [:,:, 0] .copy()' исправлено это. –

ответ

14

Функция имеет следующую строку документа: imshow(winname, mat) -> None. Вы можете увидеть строку документа, набрав в интерпретаторе cv2.imshow.__doc__.

Пробег: cv2.imshow('Image', cvimage).

+2

Когда я делаю 'cvimage = cv2.imread ('image.png')', за которым следует 'cv2.imshow ('Image', cvimage)', ошибки не возвращаются и изображение отображается. – zarthur

+0

Без импорта numpy они возвращают 'numpy.ndarray'. – zarthur

+1

у вас отсутствует требуемый аргумент arg – Neon22

3

Mat объект был необходим, потому что на C/C++ не было стандартной/нативной реализации матриц.

Однако numpyarray - идеальная замена для этой функциональности. Следовательно, модуль cv2 принимает numpy.array s, где матрица указана в документах.

14

Вопрос технически спрашивает, как преобразовать массив NumPy (аналогичный массиву CV2) в объект Mat (CV). Для тех, кто заинтересован, это может быть сделано:

mat_array = cv.fromarray(numpy_array) 

где mat_array является объект Mat и numpy_array является массив NumPy или изображение. Я бы посоветовал, если это возможно, держаться подальше от старых CV-структур. Массивы Numpy предлагают гораздо лучшую производительность, чем реализация на родном Python

+9

Это для cv не cv2 –

+0

Как это сделать в C++ и cv2? –

Смежные вопросы