Captura de vídeo en GUI Matlab

Con este programa se pretende mostrar la forma de capturar vídeo e imágenes en una interfaz gráfica.
El campo tag del axes que presenta el vídeo es axes1 y del axes que contiene la imagen capturada es axes2. El código en la sección de inicialización del programa es el siguiente:
function video_gui_OpeningFcn(hObject, eventdata, handles, varargin)
movegui(hObject,'center')
set(handles.axes1,'XTick',[ ],'YTick',[ ])
set(handles.axes2,'XTick',[ ],'YTick',[ ])
imaqreset
handles.output = hObject;
guidata(hObject, handles);
Con la herramienta Object browser podemos ver el campo tag de cada elemento de la GUI. (Ver Figura siguiente).
El botón de inicio de la GUI abre un programa que de forma automática detecta las cámaras de vídeo (Ver Figura siguiente).
En la función de apertura contiene el código del Listado siguiente.
function sel_camera_OpeningFcn(hObject, eventdata, handles, varargin)
imaqreset;
set(handles.ok_b,'Enable','off')
hw=imaqhwinfo('winvideo');
handles.cam=hw;
set(handles.lista_camaras,'String',{hw.DeviceInfo.DeviceName})
handles.output = hObject;
guidata(hObject, handles);
Con el pop up menu seleccionamos qué cámara usar. Dentro de la función asociada a este elemento (mostrada en el Listado siguiente) está la programación que extrae las principales características de la cámara seleccionada.
function lista_camaras_Callback(hObject, eventdata, handles)
pos=get(handles.lista_camaras,'Value');
hw=handles.cam;
id=hw.DeviceIDs{pos};
set(handles.id_camara,'String',id)
formatos=hw.DeviceInfo(pos).SupportedFormats;
set(handles.formatos,'String',formatos)
list_f = [formatos{1:end}];
si=strfind(list_f,'RGB24_320x240');
if isempty(si)
    es_web_ext=0;% Laptop: YUY2
else
    es_web_ext=1;% External: RGB
end
handles.es_web_ext=es_web_ext;
handles.id=id;
guidata(hObject, handles)
set(handles.ok_b,'Enable','on')
Al presionar el botón Ok se exportan las características de la cámara seleccionada. El Listado siguiente contiene el código de la función del botón. Note que se usan variables globales para exportar esta información a la primera GUI.
function ok_b_Callback(hObject, eventdata, handles)
global id es_web_ext
es_web_ext = handles.es_web_ext;
id = handles.id;
close (handles.camara)
Regresando a la programación del la primera GUI, una vez seleccionada la fuente de vídeo, el botón de inicio muestra la secuencia de imágenes en el primer axes de la GUI (Ver Listado siguiente).
function inicio_b_Callback(hObject, eventdata, handles)
set(handles.inicio_b,'Enable','off')
start(handles.vidobj);
vidRes = get(handles.vidobj,'VideoResolution');
nBands = get(handles.vidobj,'NumberOfBands');
hImage = image(zeros(vidRes(2), vidRes(1), nBands),'Parent',handles.axes1);
preview(handles.vidobj,hImage);
guidata(hObject, handles);
Con el botón de captura, cuya programación se muestra en el Listado siguiente, obtenemos la imagen a partir del vídeo.
function captura_Callback(hObject, eventdata, handles)
try
    rgb = getsnapshot(handles.vidobj);
    if handles.es_web_ext==0
        rgb = ycbcr2rgb(rgb);
    end
    image(rgb,'Parent',handles.axes2);
    axes(handles.axes2)
    axis off
catch    
    disp('No hay imagen para mostrar')
end
Finalmente, el botón de parada detiene la proyección de vídeo y permitirá seleccionar una nueva fuente de vídeo. (Ver Listado siguiente.)
function parar_b_Callback(hObject, eventdata, handles)
set(handles.inicio_b,'Enable','on')
stoppreview(handles.vidobj)

No hay comentarios.:

Publicar un comentario