Ошибка моментов Зернике на неправильных формах? - PullRequest
0 голосов
/ 01 декабря 2018

Когда я вызываю mahotas.features.zernike_moments на некоторых изображениях, содержащих очень неправильные формы, я получаю следующую ошибку:

fv = mahotas.features.zernike_moments(mask, cv2.minEnclosingCircle(cnt)[1], degree=8)
File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\mahotas\features\zernike.py", line 59, in zernike_moments
    c0,c1 = center_of_mass(im)
ValueError: too many values to unpack (expected 2)

Он работает с простыми формами, как показано ниже:

enter image description here

Но я получаю ошибку на изображении ниже со следующим кодом.Любая идея, что я делаю неправильно?

enter image description here

penStrokes = np.array(penStrokes)
peri = cv2.arcLength(penStrokes, True)
approx = cv2.approxPolyDP(penStrokes, 0.02 * peri, True) 
mask = np.zeros((frame.shape[0], frame.shape[1], 1), dtype='uint8')
cv2.drawContours(mask, [approx], -1, (255,), -1)
cnt = cv2.findContours(mask.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[1][0]
cv2.imshow('mask', mask)


# Determine shape from zernike moments
fv = mahotas.features.zernike_moments(mask, cv2.minEnclosingCircle(cnt)[1], degree=8)
print(fv)

Редактировать Кажется, если я изменю размер маски до 500 пикселей в ширинукод работает?Есть ли у махот минимальный размер, которым должна быть форма?

1 Ответ

0 голосов
/ 09 декабря 2018

Автор mahotas здесь.

mask является трехмерным изображением (хотя последнее измерение 1), в то время как функция работает только для одномерных изображений.Попробуйте:

fv = mahotas.features.zernike_moments(mask[:,:,0], \
                        cv2.minEnclosingCircle(cnt)[1], \
                        degree=8)
...