Sto usando la ricerca selettiva qui: http://koen.me/research/selectivesearch/ Ciò fornisce possibili aree di interesse in cui un oggetto potrebbe essere. Voglio fare un po 'di elaborazione e mantenere solo alcune delle regioni, e quindi rimuovere le caselle di delimitazione duplicate per avere una raccolta finale di scatole di delimitazione. Per eliminare le regioni di caselle di delimitazione indesiderate/duplicate, sto utilizzando la funzione grouprectangles
di opencv per l'eliminazione.python opencv TypeError: layout dell'array di output incompatibile con cv :: Mat
Una volta che ho le regioni interessanti Matlab dal "algoritmo di ricerca selettivo" nel link qui sopra, ho salvare i risultati in un file .mat
e poi recuperarli in un programma di pitone, in questo modo:
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
L'errore è:
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)
Cosa c'è di sbagliato? Ho fatto qualcosa di molto simile in un altro pezzo di codice che non ha dato errori. Questo è stato il codice senza errori:
inboxes = sio.loadmat('C:\\PATH_TO_MY_FILE\\boxes.mat')
boxes = np.array(inboxes['boxes'])
pruned_boxes = cv2.groupRectangles(boxes.tolist(), 100, 300)
L'unica differenza che posso vedere è che boxes
era una matrice NumPy che ho poi convertito in un elenco. Ma nel mio codice problematico, found
è già un elenco.
semplicemente copiando la matrice ha lavorato per me per un errore simile pure. –
Posso confermare anche questo, non sembra esserci alcuna differenza visibile, tho. – Pwnna
Questa soluzione ha funzionato per un errore simile prodotto dalla funzione cv2.ellipse() – DanGoodrick