Ошибка при выполнении выпуклого полёта в регионах, обнаруженных MSER
Я нашел пример MSER в Python OpenCV. Когда я пытаюсь запустить его, я получаю сообщение об ошибке, когда он пытается изменить форму list
/numpy.array
, Ошибка:
AttributeError: у объекта 'list' нет атрибута 'reshape'
Как я могу исправить эту проблему? В приведенном ниже простом коде я прокомментировал, где происходит ошибка:
import cv2
import numpy as np
img = cv2.imread('../images/Capture2.JPG', 0);
vis = img.copy()
mser = cv2.MSER_create()
regions = mser.detectRegions(img)
hulls = []
for p in regions:
# Error on below line: 'AttributeError: 'list' object has no attribute 'reshape''
hulls.append( cv2.convexHull(p.reshape(-1, 1, 2)) )
# Note a numpy array isn't working either: error: 'ValueError: cannot reshape array of size 2605 into shape (1,2)'
p = np.array(p)
hulls.append( cv2.convexHull(p.reshape(-1, 1, 2)) )
cv2.polylines(vis, hulls, 1, (0, 255, 0))
cv2.imshow('img', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()
1 ответ
Я думаю mser.detectRegions(img)
развился немного по различным версиям выпуска. В моем случае у меня есть версия OpenCV:
import cv2
print cv2.__version__
>>> 3.3.0
И mser.detectRegions(img)
возвращает значение с двумя значениями вместо одного возвращаемого значения. Вы можете исправить это, проигнорировав второе значение кортежа:
regions, _ = mser.detectRegions(img)
Я поднял вопрос о версии, потому что много примеров доступны в Интернете regions = mser.detectRegions(img)
, Что может привести к путанице.
На данный момент я не уверен в версии, вызвавшей эту двусмысленность, поэтому предлагаю быстрое решение вашей проблемы.