Estoy actualizando samples/c/motempl.c a OCV 2.3 y estoy un poco desconcertado por el método cv :: updateMotionHistory(). Creo la historia después de lo que he visto en motempl.c:Cómo llamar a cv :: updateMotionHistory() en OpenCV
history = cv::Mat::zeros(640, 480, CV_32FC1);
Entonces, me llaman updateMotionHistory(), así:
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);
parece que está bien, pero siempre está lanzando el siguiente:
OpenCV Error: Sizes of input arguments do not match() in cvUpdateMotionHistory
Ambas matrices son del mismo tamaño ,, 640, 480, pero sólo por diversión he intentado cambiar la historia para que me CV_8U obtiene:
OpenCV Error: Unsupported format or combination of formats() in cvUpdateMotionHistory
Siguiendo en la muestra, donde hay esto:
mhi = cvCreateImage(size, IPL_DEPTH_32F, 1);
entiendo por qué la historia tiene que ser una imagen de flotador, que no soy seguro de cómo llamar a este método con matrices en lugar de casos IplImage . ¡Gracias!
Ha comprobado el tamaño real del 'diff' después de la operación 'absdiff'? Porque si los tamaños de 'currentFrame' y' prevFrame' son diferentes, el tamaño de 'diff' cambiaría durante esa operación. La llamada a 'updateMotionHistory' no produce un error si elimino la operación' absdiff'. – sietschie
Sí, diff es 640,480, CV_8U también, que es parte de la razón por la que estaba lo suficientemente confundido como para publicar esta pregunta aquí :) –