python opencv TypeError: расположение выходного массива, несовместимого с cv :: Mat
Я использую выборочный поиск здесь:http://koen.me/research/selectivesearch/ Это дает возможные области интереса, где объект может быть. Я хочу выполнить некоторую обработку и сохранить только некоторые области, а затем удалить дублирующие ограничивающие блоки, чтобы получить окончательный аккуратный набор ограничивающих прямоугольников. Чтобы удалить ненужные / дублированные ограничивающие области областей, я используюgrouprectangles
функция opencv для обрезки.
Как только я получаю интересные области от Matlab из «алгоритма выборочного поиска» по ссылке выше, я сохраняю результаты в.mat
файл, а затем получить их в программе Python, например:
import scipy.io as sio
inboxes = sio.loadmat('C:\\PATH_TO_MATFILE.mat')
candidates = np.array(inboxes['boxes'])
# candidates is 4 x N array with each row describing a bounding box like this:
# [rowBegin colBegin rowEnd colEnd]
# Now I will process the candidates and retain only those regions that are interesting
found = [] # This is the list in which I will retain what's interesting
for win in candidates:
# doing some processing here, and if some condition is met, then retain it:
found.append(win)
# Now I want to store only the interesting regions, stored in 'found',
# and prune unnecessary bounding boxes
boxes = cv2.groupRectangles(found, 1, 2) # But I get an error here
Ошибка:
boxes = cv2.groupRectangles(found, 1, 2)
TypeError: Layout of the output array rectList is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
В чем дело? Я сделал нечто очень похожее в другом фрагменте кода, который не дал ошибок. Это был безошибочный код:
inboxes = sio.loadmat('C:\\PATH_TO_MY_FILE\\boxes.mat')
boxes = np.array(inboxes['boxes'])
pruned_boxes = cv2.groupRectangles(boxes.tolist(), 100, 300)
Единственное отличие, которое я вижу, в том, чтоboxes
был просто массив, который я затем преобразовал в список. Но в моем проблемном коде,found
это уже список.