Конфликтующие типы данных 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