Matlab - Mostrar Video en una axe y aplicar un codigo.

 
Vista:
sin imagen de perfil

Mostrar Video en una axe y aplicar un codigo.

Publicado por Manuel (1 intervención) el 15/11/2013 03:35:47
Hola amigos de LWP soy nuevo en este foro y quisiera que me ayuden, veran tengo un proyecto para detectar movimiento usando una camawep y luego al momento que se detecta movimiento enviar un mensaje por un modulo GSM, usando el puerto serial.
............ bueno es si el programa ya esta listo el problema es que necesito presentarlo usando una GUI, y tambien usar axes, normalmente al momento de ejecutar el programa la imagen que me muestra por la camara los colores salen mal, creo que se debe al

subplot(2,2,1);imshow(IM(:,:,:,1));title('Input Video-Image') que hace defrente.

Ahora, ya en podido mostrar en el axe la camara, sin embargo no me ejecuta la parte siguiente para mostrar el mensaje y enviarlo, les dejo el codigo que si me funciona correctamente:

DETECTOR DE MOVIMIENTO--------------------------
%-----------------------------------------------------------------------
clc
vid = videoinput('winvideo', 1 , 'YUY2_640x480');
set(vid,'TriggerRepeat',Inf);
vid.FrameGrabInterval = 5;
start(vid);
try
% media=[];
while(vid.FramesAcquired<=110) % Stop after 110 frames
IM = getdata(vid,2);
IMGray = rgb2gray(IM(:,:,1:3));
IMbw=im2bw(IMGray,0.5);
IMneg=imadjust(IMGray,[0 1],[1 0]);

subplot(2,2,1);imshow(IM(:,:,:,1));title('Input Video-Image')
%%subplot(2,3,2);imshow(IMbw);title('Black & White Video')
%%subplot(2,3,3);imshow(IMGray);title('Gray Scale Video')
%%subplot(2,3,2);imshow(IMneg);title('Negative Image Video')
i1=IM(:,:,:,1);
i2=IM(:,:,:,2);
i1=rgb2gray(i1(:,:,1:3));
i2=rgb2gray(i2(:,:,1:3));
m=abs(double(i1)-double(i2))/256;
subplot(2,2,2);imshow(m);title('Movement')
%/////////////////////////////////////////////////////////
%if sum(sum(movimiento))>1850
%disp('Detectado movimiento, ¡¡quietorrr!!');
%beepbeep([],'alarm clock');
%beep on;
%También hacemos un sonidito de alarma (ya investigaré como simular unade verdad)
%end
%//////////////////////////////////////////////////////////////
% sum(sum(m))
% media=[media sum(sum(m))];
%--------------------------------------------
if sum(sum(m))>4000
disp('Se detecto Movimiento');


SER_2_PIC=serial('COM5');
set(SER_2_PIC,'BaudRate',9600);
set(SER_2_PIC,'DataBits',8);
set(SER_2_PIC,'Parity','none');
set(SER_2_PIC,'StopBits',1);
set(SER_2_PIC,'FlowControl','none');
fopen(SER_2_PIC);
%fprintf(SER_2_PIC,'A%d$\n',Num); % Envia Dato
fprintf(SER_2_PIC,'A63$'); % Envia Dato
fclose(SER_2_PIC);
delete(SER_2_PIC);
clear SER_2_PIC;




end
%--------------------------------------
%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
end
stop(vid);
catch
stop(vid);
end


----------------------------------------------------------------------------------
Este codigo lo ejecuto directamente y si me funciona, pero no estoy usando GUI, obien la parte de la parte serial ya que el fprintf(SER_2_PIC,'A63$'); % Envia Dato es por un pick que lee lo que esta entre A$.

Bueno siguiedo con mi problema al usar el gui , si me muestra el video en tiempo real capturado por la camara, pero no ejecuta la parte que esta en el TRY, acontinuacion les muestro el codigo que estoy usando y no me funciona correctamente:


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global vid
vid = videoinput('winvideo', 1,'YUY2_640x480')
set(vid,'TriggerRepeat',Inf);
vidRes = get(vid, 'VideoResolution');
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = get(vid, 'NumberOfBands');
hImage = image( zeros(imHeight, imWidth, nBands),'Parent',handles.video_cam );
preview(vid,hImage);
start(vid)


try
% media=[];
while(vid.FramesAcquired<=110) % Stop after 110 frames
IM = getdata(vid,1);
i1=IM(:,:,:,1);
i2=IM(:,:,:,2);
i1=rgb2gray(i1(:,:,1:3));
i2=rgb2gray(i2(:,:,1:3));
m=abs(double(i1)-double(i2))/256;


if sum(sum(m))>4000
disp('Se detecto Movimiento');


end
%--------------------------------------
%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
end
stop(vid);
catch
stop(vid);
end



---------------------------------------------------------------------------------

todo esto lo he puesto en un Boton, pero como ya les dije solo muestra el video pero no realiza la operacion del TRY.

Espero que me ayuden o me puedan dar soluciones para solucionar el problema,
Gracia de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder