Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Para alimentar a mi algoritmo de IA me gustaría meterle peliculas y hacer una captura por segundo y pasarle al algoritmo las imágenes "para que aprenda como es el mundo".
El caso es que quisiera hacerlo automatizadamente desde una consola C++, en el que el mi programa sea el master.
¿que software puedo usar? he intentado alguno y se me ha metido un troyano con lo cual he quedado un poco escarmentado.
cvRetrieveFrame es el método, dentro de la clase CvCapture, que te devuelve un frame del video. Creo recordar que también había un método que te posiciona dentro del video por si quires volver atrás o saltarte algún frame. En principio se procesan todas las imágenes.
Si usas el GUI de OpenCV vas a usar muchos recursos porque OpenCV no usa OpenGL. El GUI de OpenCV está bien, pero está pensado para que funcione también en ordenadores sin aceleración gráfica (cosa poco frecuente hoy día).
Te paso un par de enlaces al SVN de RoboComp. El primero es a una clase que pertenece al componente cvcameraComp, que sirve para capturar imágenes mediante OpenCV (funciona con cámaras y con videos), seguro que te sirve como código de ejemplo. Los enlaces son al .h y al .cpp de la clase:
cvcameraI.h
cvcameraI.cpp
Supongo que ya has visto la clase que te dije de pintar, QAcho, y es a la que te refieres. Esa clase usa Qt y quizás no quieras usar Qt. Tienes otra opción, usar otra clase que hice hace más tiempo pero que es igual de eficiente, usando SDL. En el laboratorio creo que ya sólo la usa una persona porque no está integrado con Qt y solemos usar Qt, pero funciona perfectamente. Si no supones cómo se usa te puedo pasar algunos ejemplos que tengo por ahí. Te paso las direcciones:
monitor.h
monitor.cpp
Usar OpenCV para mostrar las imágenes está bien para probar, pero a 30fps consume bastante. El monitor te permite lo mismo sin tener que usar Qt. Espero haberte ayudado, si con el ejemplo de cvcameraI no te enteras, échale un vistazo a esto
Y así me ha quedado, gracias luisj
La unica pega es que la ultima linea la he tenido que eliminar pues da error: cvReleaseImage(&img);
//Captura video usando OPENCV
#include <cv>
#include <cxcore>
#include <highgui>
#include <stdlib>
#include <stdio>
void main()
{
cvNamedWindow("VideoCaptura",1);
//CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0
CvCapture* capture = cvCaptureFromAVI("video.avi"); // capture from avi video file
// Capturing frame:
IplImage* img = 0;
if(!cvGrabFrame(capture))
{ // capture a frame
printf("Could not grab a framen7");
getchar();exit(0);
}
long i;
for(i=0;i<90;i++)
{
int c;
cvGrabFrame(capture);
img=cvRetrieveFrame(capture); // retrieve the captured frame
cvShowImage("VideoCaptura",img);
c = cvWaitKey(0);
}
//To obtain images from several cameras simultaneously, first grab an image from each camera. Retrieve the captured images after the grabbing is complete.
//Note that the image captured by the device is allocated/released by the capture function. There is no need to release it explicitly.
//Getting/setting frame information
cvQueryFrame(capture); // this call is necessary to get correct
// capture properties
int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
printf("nFrame size= %i x %i FPS= %i Frame number= %i",frameW,frameH, fps, numFrames);
//Releasing the capture source:
cvReleaseCapture(&capture);
cvDestroyWindow("VideoCaptura");
getchar();
//cvReleaseImage(&img);
}
Tio, pues para eso no hay solución eh... ¡Algo debes tener mal!
Que no hombre, que es broma. No hace falta que liberes la imagen porque en el caso del cvCapture la imagen pertenece al capture que sí que liberas. Es un atributo de cvCapture, por lo que al liberarlo ya al llamar a cvReleaseCapture no hace falta que lo vuelvas a hacer.
El siguiente paso es pasar de las ventanitas de OpenCV 🙂
Je, ha estado bueno, 🙂
Esto vá como una moto 🙂
Ahora el problema es de codecs. He convertido e¡el VOB de un video a divx, hasta aqui todo bien, pero como era una version de evaluacion la he eliminado y con ella se fue tambien el codec, por lo que ahora no la puedo abrir.
Necesitaria el modo de conseguir codec divx o un conversor de vob a avi ó uno de divx a avi.
Me gustaría algún shareware
Puedes usar cualquier paquete de codecs que hay gratuitos por la red. Con eso no tendrás ningún problema de codecs