Sto aggiornando i campioni/c/motempl.c in OCV 2.3 e sono un po 'perplesso dal metodo cv :: updateMotionHistory(). Creo la storia segue quello che ho visto in motempl.c:Come chiamare cv :: updateMotionHistory() in OpenCV
history = cv::Mat::zeros(640, 480, CV_32FC1);
Poi, mi chiamano updateMotionHistory() in questo modo:
cv::Mat diff = cv::Mat::zeros(640, 480, CV_8U);
if(prevFrame.size().width != 0) {
cv::absdiff(currentFrame, prevFrame, diff);
} else {
return;
}
cv::updateMotionHistory(diff, history, getElapsedSeconds(), MHI_DURATION);
sembra ok, ma è sempre gettando il seguente:
OpenCV Error: Sizes of input arguments do not match() in cvUpdateMotionHistory
Entrambe le matrici sono le stesse dimensioni ,, 640, 480, ma solo per divertimento ho provato a cambiare la storia a CV_8U che mi fa:
OpenCV Error: Unsupported format or combination of formats() in cvUpdateMotionHistory
seguito sul campione, dove c'è questo:
mhi = cvCreateImage(size, IPL_DEPTH_32F, 1);
ho motivo per cui la storia ha bisogno di essere immagine di un galleggiante, io non sono solo sicuro come chiamare questo metodo con matrici piuttosto che le istanze IplImage . Grazie!
Avere è stata selezionata la dimensione effettiva del 'diff' dopo l'operazione 'absdiff'? Perché se le dimensioni di 'currentFrame' e' prevFrame' sono diverse, le dimensioni di 'diff' cambierebbero durante quell'operazione. La chiamata a 'updateMotionHistory' non produce un errore se rimuovo l'operazione' absdiff'. – sietschie
Sì, diff è 640.480, CV_8U, che è parte del motivo per cui sono stato abbastanza confuso da postare questa domanda qui :) –