python opencv TypeError: diseño de la matriz de salida incompatible con cv :: Mat
Estoy usando la búsqueda selectiva aquí:http://koen.me/research/selectivesearch/ Esto proporciona posibles regiones de interés donde podría estar un objeto. Quiero hacer un procesamiento y retener solo algunas de las regiones, y luego eliminar cuadros delimitadores duplicados para tener una colección final ordenada de cuadros delimitadores. Para descartar regiones de cuadros delimitadores no deseados / duplicados, estoy usando elgrouprectangles
función de opencv para poda.
Una vez que obtengo las regiones interesantes de Matlab del "algoritmo de búsqueda selectiva" en el enlace de arriba, guardo los resultados en un.mat
archivo y luego recuperarlos en un programa de Python, como este:
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
El error es:
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)
Que pasa Hice algo muy similar en otro código que no dio errores. Este fue el código libre de errores:
inboxes = sio.loadmat('C:\\PATH_TO_MY_FILE\\boxes.mat')
boxes = np.array(inboxes['boxes'])
pruned_boxes = cv2.groupRectangles(boxes.tolist(), 100, 300)
La única diferencia que puedo ver es queboxes
era una matriz numpy que luego convertí en una lista. Pero en mi código problemático,found
Ya es una lista.