I'm trying to display an image in GUI but a problems is that I can not display image in axes in the function I added: function BytesAvailable_Callback(obj,event) , when i call : axes(handles.axes1) imshow('image1.jpg') then it do not display in axes but display in new window figure1.
If i call axes(handles.axes1); imshow('image1.jpg') in any button function, it correctly display in that axes. Why?
My code:
%—————–HAM HIEN VIDEO————————-
global vidobj; global hand; % create the video object with the desired resolution vidobj =videoinput('winvideo',1,'YUY2_640x480');%, info.DeviceInfo(1,1).SupportedFormats{1}); set(vidobj, 'FramesPerTrigger', 1); set(vidobj, 'ReturnedColorSpace', 'rgb');
% create a handle to the axes where the image will be displayed vidRes = get(vidobj, 'VideoResolution'); nBands = get(vidobj, 'NumberOfBands'); hImage = image( zeros(vidRes(2), vidRes(1), nBands), 'parent', handles.video);
% identify which function is associated with the UpdatePreviewWindowFcn % video_preview_fcn (see below) is called automatically each time the camera has an image available – you don't need to call this function setappdata(hImage, 'UpdatePreviewWindowFcn', @video_preview_fcn);
% call preview to start the live image feed preview(vidobj,hImage);
%srcObj1 = get(vidobj, 'Source'); % Tuy chinh mau cho video %set(srcObj1(1), 'Brightness', 10);
%——————– HIEN ANH LEN GIAO DIEN————————
s=serial('COM7'); s.BytesAvailableFcn = @BytesAvailable_Callback fopen(s); % fclose(s);
%ind = fscanf(s);
%i=isempty(ind)
*%This function I added to read data from RS232 port, then processing this data and make it as a conditon to display image but can not *
%---------------------- Serial_Callback
function BytesAvailable_Callback(obj,event)
global hand; global vidobj; ind = fscanf(obj) %--------Moi them vao - Trung ----
fid = fopen('mavach.txt', 'at'); fprintf(fid,'%s\n\n',ind);%Write 'word' in text file (upper)
% set(handles.mavach,'String',ind);
fclose(fid); %---------------------------------
% Edit code here - Ngo Hai Bac
set(hand.mavach,'String',ind); % if(~isempty(ind))
% Neu co ma vach thi chup anh-----------
testpic = getsnapshot(vidobj); imwrite(testpic,'image1.jpg'); _axes(hand.image) imshow('image1.jpg');_
% I can not display this image in axes because it always diplay in new window
%--------Xuat ma vach ra file txt ----
fid = fopen('mavach.txt', 'at'); % fprintf(fid,'%s\n',ind); %Write 'word' in text file (upper)
fclose(fid); %---------------------------------
%——————————————————————
%————NHAN DANG BIEN SO XE——————
% Nhi phan anh
BW = imread('image1.jpg'); I1 = rgb2gray(BW); I1 = medfilt2(I1,[3 3]); % Loc trung vi
level=graythresh(I1); BW1=im2bw(I1,level); BW1 = bwareaopen(BW1,350); % Loai bo nhung doi tuong be hon 350 pixel
%———–TIM VUNG BIEN SO XE———————
object = regionprops(BW1); for index=1:length(object) %BoundingBox co 2 thanh phan tra ve la [ul_corner width]
% ul_corner: toa do [x y]chi goc phia tren cung ben trai cua box
% width: [x_width y_width] chieu rong va chieu cao cua box
if object(index).Area > 50000 && object(index).BoundingBox(3)/object(index).BoundingBox(4) > 0.5 x = ceil(object(index).BoundingBox(1)+4) % Lam tron len
y= ceil(object(index).BoundingBox(2)+4) %Toa do
widthX = floor(object(index).BoundingBox(3)-15) % Lam tron xuong
widthY = floor(object(index).BoundingBox(4)-9) % Chieu cao va chieu dai
subimage(index) = {BW(y:y+widthY,x:x+widthX,:)}; subimage{index}=~subimage{index}; % figure,imshow(subimage{index});
BW1= subimage{index}; end end imwrite(BW1,'image2.jpg') axes(hand.plateimage) imshow('image2.jpg')
%This image is too…
Best Answer