Vous êtes sur la page 1sur 4

MATLAB, como no poda ser de otra manera, es una herramienta muy til para el desarrollo gil de algoritmos, probarlos

y as, cuando nos decidamos a pasarlos a un lenguaje distinto que nos permita su mejor explotacin, estemos seguros de que va a funcionar, que no hemos implementado funciones que realmente no nos hacan falta y que no vamos a dar demasiados pasos en falso. Nosotros, los que estudiamos Ingeniera de Telecomunicaciones, estamos bastante acostumbrados a trabajar con MATLAB pero, al menos en mi caso, siempre me haba visto tratando seales de audio o de radiacin, nunca imgenes o vdeos. Pero ayer, en un intento de hacer algo diferente (mostrar la evolucin de una imagen conforme se va comprimiendo), se me ocurri la idea de mostrar cada una de las imgenes obtenidas por mi algoritmo como un frame de vdeo en una pelcula. Tras investigar un poco, puedo decir que crear un vdeo *.avi usando MATLAB, es de lo ms sencillo, es ms, slo tenemos que escribir cuatro lneas (aunque usa podr repetirse tantas veces como frames tengamos en nuestro vdeo).

Paso 1
Creamos una variable en la que insertaremos los distintos frames:

movie = avifile('video.avi', 'fps', 10, 'compression', 'none');

Esta funcin tiene la siguiente especificacin:

aviobj = avifile(filename, ParameterName, ParameterValue)

Es decir, le tenemos que pasar el nombre del fichero y tantas parejas parmetro->valor como deseemos; en nuestro caso hemos especificado que queremos mostrar 10 frames por segundo y que no queremos compresin alguna en nuestro vdeo resultante.

Paso 2
Aadimos todos los frames que deseemos, para ello antes debemos convertir la imagen que queremos que aparezca en el vdeo en un frame; en definitiva:

1 2

frame = im2frame(image, gray(256)); movie = addframe(movie, frame);

Si tienes dudas sobre lo que hacen estas funciones puedes consultar las especificaciones deim2frame y de addframe.

Paso 3
Cerramos las variables y, por consiguiente dejamos el video listo para reproducirse en programas como el videoln:

movie = close(movie);

movie
Play recorded movie frames

Syntax
movie(M) movie(M,n) movie(M,n,fps) movie(h,...) movie(h,M,n,fps,loc)

La funcin de pelcula se reproduce la pelcula definida por una matriz cuyas columnas son cuadros de pelcula (por lo general producido por GetFrame).

pelcula (M) reproduce la pelcula en la matriz M una vez, utilizando los ejes actuales como el destino predeterminado. Si desea reproducir la pelcula en la figura en lugar de los ejes, especifique el identificador grfico (o formacin bruta de capital) como primer argumento: la pelcula (figure_handle, ...). M debe ser una serie de cuadros de pelcula (por lo general de GetFrame).

pelcula (m, n) reproduce la pelcula n veces. Si n es negativo, cada ciclo se muestra hacia adelante y luego hacia atrs. Si n es un vector, el primer elemento es el nmero de veces para reproducir la pelcula, y el resto de elementos conforman una lista de marcos para jugar en la pelcula.

Por ejemplo, si M tiene cuatro marcos entonces n = [10 4 4 2 1] juega la pelcula diez veces, y la pelcula constituida por bastidor de 4 seguido de marco 4 de nuevo, seguido por el marco 2 y, finalmente, marco 1.

pelcula (M, n, fps) reproduce la pelcula en fps fotogramas por segundo. El valor predeterminado es de 12 fotogramas por segundo. Los equipos que no pueden lograr el juego de velocidad especificado lo ms rpido posible.

pelcula (h, ...) reproduce la pelcula centrada en la figura o ejes identificados por el mango h. Especificacin de la figura o ejes permite MATLAB para ajustar la pelcula al tamao disponible.

pelcula (h, m, n, fps, loc) especifica loc, un lugar de cuatro elementos-vector, [xy 0 0], donde est anclada la esquina inferior izquierda del cuadro de pelcula (slo se usan los primeros dos elementos en el vector ). La ubicacin es relativa a la esquina inferior izquierda de la figura o ejes indicados por el mango h y en unidades de pxeles, independientemente de la propiedad Unidades del objeto.

Examples
Animate the peaks function as you scale the values of Z: figure('Renderer','zbuffer') Z = peaks; surf(Z); axis tight set(gca,'NextPlot','replaceChildren'); % Preallocate the struct array for the struct returned by getframe F(20) = struct('cdata',[],'colormap',[]); % Record the movie for j = 1:20 surf(.01+sin(2*pi*j/20)*Z,Z) F(j) = getframe; end Now play the movie ten times. The twelfth frame looks like the following plot. movie(F,10)

With larger frames, first adjust the figure's size to fit the movie: figure('Position',[100 100 850 600]) Z = peaks; surf(Z); axis tight set(gca,'NextPlot','replacechildren'); % Record the movie for j = 1:20 surf(sin(2*pi*j/20)*Z,Z) F(j) = getframe; end % use 1st frame to get dimensions [h, w, p] = size(F(1).cdata); hf = figure; % resize figure based on frame's w x h, and place at (150, 150) set(hf,'Position', [150 150 w h]); axis off % Place frames at bottom left movie(hf,F,4,30,[0 0 0 0]);

Vous aimerez peut-être aussi