Неподдерживаемая комбинация форматов массивов ввода и вывода в функции cv :: redu - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь запустить код сегментации строк, который я нашел на GitHub.Когда программа достигает этой строки кода:

def invert(im):
    im = abs(255 - im)
    im = im / 255

    return im


def enhance(im):
    kernel = np.ones((5, 5), np.uint8)
    im = cv2.erode(im, kernel, iterations=1)
    kernel = np.ones((15, 15), np.uint8)
    im = cv2.dilate(im, kernel, iterations=1)
    return im


im = cv2.imread(filename, 0)
imbw = sauvola.binarize(im, [20, 20], 128, 0.3)
im = invert(im)
im = enhance(im)
hist = cv2.reduce(im, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32F)

Я получаю эту ошибку:

Ошибка: OpenCV (3.4.1) C: \ projects \ opencv-python \ opencv\ modules \ core \ src \ matrix_operations.cpp: 1111: ошибка: (-210) Неподдерживаемая комбинация форматов входных и выходных массивов в функции cv :: lower

Я перепробовал все значения dtypeдоступно для функции cv2.reduce ().Я также попытался изменить тип данных изображения, используя NumPy.Но все равно я получаю ту же ошибку.

Полный код: https://github.com/smeucci/LineSegm/blob/master/python/linesegm/lib/linelocalization.py#L41

1 Ответ

0 голосов
/ 10 июня 2019

imread() возвращает uchar данные, но вы обрабатываете их так, как если бы вы получили числа с плавающей запятой.

im = im / 255

Например, эта строка кода сделает все пиксели равными нулю, если вы примените ее uchar OpenCV matrix .

Преобразование вашего im формата пикселей в плавающие после чтения изображения. Этот код работает для меня:

im = cv2.imread("im.jpg", 0)
im = np.float32(im)
im = invert(im)
im = enhance(im)
hist = cv2.reduce(im, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32F)
...