У меня словарь 'roi' следующий,
{
10: [],
11: [[[315.0, 193.0],
... ...
[315.0, 193.0]]],
12: [[[317.0, 195.0],
... ...
[317.0, 195.0]],
[[318.0, 320.0],
... ...
[318.0, 320.0]]],
13: [[[307.0, 148.0],
... ...
[307.0, 148.0]],
[[311.0, 323.0],
... ...
[311.0, 323.0]]],
14: [[[306.0, 170.0],
... ...
[306.0, 170.0]],
[[322.0, 302.0],
... ...
[322.0, 302.0]]],
15: [[[303.0, 167.0],
... ...
[303.0, 167.0]]],
16: [[[301.0, 168.0],
... ...
[301.0, 168.0]]],
17: [[[302.0, 175.0],
... ...
[302.0, 175.0]]],
18: [[[299.0, 190.0],
... ...
[299.0, 190.0]]]}
}
Я пытаюсь использовать списки в dict как наборы точек и применить cv2.fillConvexPoly для «маскирования»
Поскольку cv2.fillConvexPoly требует, чтобы входные наборы точек имели тип numpy.array, я попытался преобразовать все это с помощью np.array ().
for k in roi.keys():
point_sets = np.array(roi[k])
for p in range(point_sets.shape[0]):
print(type(point_sets[p]))
# cv2.fillConvexPoly(mask[k], point_set, 1)
И результат,
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'numpy.ndarray'>
Мне приходит в голову, что, поскольку списки, соответствующие ключу 12, 13 и 14, содержат 2 списка, 2 списка внутри не могут быть преобразованы в np.array. В результате я работал над этой проблемой, дважды выполнив преобразование типов, убедившись, что все имеют тип np.array.
point_sets = np.array(roi[k])
for p in range(point_sets.shape[0]):
point_set = np.int32([np.array(point_sets[p])])
cv2.fillConvexPoly(mask[k], point_set, 1)
Теперь я ожидаю несколько способов сделать это, не выполняя np.array () дважды, поскольку это выглядит немного неловко и ненужно.
Спасибо