Конфликтующие типы данных Numpy и OpenCV2 при вызове функций OpenCV
у меня большая проблема при использовании OpenCV 2 Python API. Больше нет отдельных типов матриц OpenCV. Каждая матрица на самом деле матрица numpy. Пока все хорошо. Проблема возникает при вызове функций OpenCV на этих матрицах, требующих определенного типа данных. OpenCV, похоже, имеет проблемы с согласованием типов данных numpy с типами данных OpenCV. Например, матрицы numpy с np.uint8
Кажется, не распознается как cv_8uc1
.
вот конкретный пример, где он идет неправильно, при попытке выполнить преобразование расстояния на пороговом изображении:
# threshold operation
val, thr = cv2.threshold(img, 64, 255, cv2.THRESH_BINARY )
# storage matrix for the distance map
map = np.zeros((rows,cols,1), np.uint8)
# attempt to apply distance transform
out = cv2.distanceTransform(thr, cv2.DIST_LABEL_CCOMP, 3, map)
это приводит к следующей ошибке:
OpenCV Error: Unsupported format or combination of formats (source
imagemust be 8uC1 and the distance map must be 32fC1 (or 8uC1 in
case of simple L1 distance transform)) in cvDistTransform
....
2.4.8/modules/imgproc/src/distransform.cpp:723: error: (-210)
source image must be 8uC1 and the distance map must be 32fC1
(or 8uC1 in case of simple L1 distance transform) in function
cvDistTransform
thr.dtype
is np.uint8
Так я не знаю, почему эта ошибка появляется. OpenCV 2 не сопоставляет типы данных numpy с соответствующими типами данных OpenCV?
Я был бы очень рад найти решение этой проблемы.
1 ответов
не удалось воспроизвести...
import cv2
import numpy as np
thr = np.random.rand(100,100).astype(np.uint8)
map = np.zeros((100,100,1), np.uint8)
out = cv2.distanceTransform(thr, cv2.DIST_LABEL_CCOMP, 3, map)
# no errors
Вы можете дважды проверить используемые типы данных.
python 2.7.3
numpy 1.6.1
cv2 2.4.10