2012-11-02 23 views
5

Sto usando OpenCV 2.4.2 e sto provando a prendere proiezioni di due matrici (tmpl(32x44), subj(32x44)) lungo la riga e la colonna. Ho inizializzato una matrice di risultati come rowProjectionSubj(subj.rows,1,CV_8UC1) Quindi chiamo cv::reduce(subj,rowProjectionSubj,1,CV_REDUCE_SUM,-1);Formato non supportato o combinazione di formati quando si utilizza il metodo cv :: reduce in OpenCV

Perché questo si lamenta della mancata corrispondenza del tipo? Ho mantenuto i tipi stesso (tenendo dtype=-1 in cv::reduce ottengo le tmpl e subj oggetti di fare cv::imread("image_path",0) cioè la scansione di immagini in scala di grigi in

risposta

2

Potrei non essere giusto, ma dopo che ho visto questo:..

http://answers.opencv.org/question/3698/cvreduce-gives-unsupported-format-exception/?answer=3701#post-id-3701

e con un piccolo esperimento e utilizzando un vecchio amico chiamato "register math", mi sono reso conto che quando si aggiungono due numeri a 8 bit, è necessario considerare un registro 8 + 1 + 1 bit per memorizzare la somma perché potenzialmente ha un'uscita portante, quindi qualsiasi risultato di riduzione dovrebbe avere uno spazio maggiore rispetto alla sorgente, cioè se la fonte è senza segno a 8 bit, dovrebbe essere almeno a 16 bit senza segno o firmato; potrebbe anche essere 32 bit se verrà utilizzato per alcuni calcoli e prodotti del prodotto ...

NOTA: il tipo di destinazione deve essere specificato ESPLICAMENTE nel metodo cv :: reduce. Si prega di seguire il mio link openCV per ulteriori informazioni.