You are here
Home > Lập Trình > Tự Học Matlab > Matlab Nâng Cao > Lập Trình GUI > Lập Trình Gui Matlab – Visible Ẩn Hiện Các Đối Tượng Trong Gui Matlab

Lập Trình Gui Matlab – Visible Ẩn Hiện Các Đối Tượng Trong Gui Matlab

Visible on off trong gui matlab

Hướng dẫn đọc và hiện thị hình ản trong Matlab

Trong bài viết trước chúng ta đã làm quen về ảnh số như là có những loại ảnh nào, cấu tạo của một hình ảnh cũng như ta đã học cách đọc và hiện thị ảnh trên cửa sổ Command Window của phần mền Matlab rồi.

doc va hien thi anh trong matlab
doc va hien thi anh trong matlab

Trong bài học hôm nay tôi và bạn cùng tìm hiểu một số câu lệnh giúp bạn có thể thao tác được với bức ảnh của mình. Cũng như ta sẽ làm một ví dụ để bạn không có cảm giác nhàn chán cứng như việc học của chúng ta trở nên hiệu quả hơn.

1. Một số lệnh cơ bản xử lý ảnh

a. Tạo 1 dialog box

uigetfile

Bạn nhận được một kết quả như hình dưới. Nó cho phép bạn lựa chọn các file nào đó bạn muốn.

uigetfile dialog box
uigetfile dialog box

Nếu bạn muốn cho người dùng chỉ chọn được các file có đuôi nào đó thì bạn có thể thực hiện câu sau:

[filename, pathname] = uigetfile( ...
             {'*.m;*.fig;*.mat;*.mdl', 'All MATLAB Files (*.m, *.fig, *.mat, *.mdl)'; ...
            '*.*', 'All Files (*.*)'}, ...
            'vutienblog.com')

Trong đó:

  • filename: Là giá trị trả về bạn nhận được khi bạn click vào file nào đó (Trả về tên file)
  • pathname: Trả về đường dẫn tới file đó
  • ‘*.m;*.fig;*.mat;*.mdl’: Là các định dạng có đuôi bạn quy định sẵ mà bạn cho phép người dùng chọn
  • vutienblog.com: Là tên gợi ý cho người dùng chọn file. Bạn có thể viết tên gì cũng được. (Nó sẽ hiện thị trên cùng bên trái của dialog box)
uigetfile dialog box matlab
uigetfile dialog box matlab

b. Nối 2 chuỗi lại với nhau

result = strcat(str1, str2);

Trong đó:

  • strcat(): Nối chuỗi
  • str1: Chuỗi 1
  • str2: Chuỗi 2
  • result: Kết quả trả về của 2 chuỗi đó được nối với nhau

Ví dụ như sau:

>> result = strcat('VuTienIT', '.Com');
>> result

result =

vutienblog.com

c. Hiện thị thông tin bức ảnh

thongTinAnh = imfinfo(duongDanTuyetDoiAnh);

Trong đó:

  • imfinfo: Đọc thông tin hình ảnh
  • duongDanTuyetDoiAnh: Là đường dẫn tới hình ảnh đó
imfinfo matlab
imfinfo matlab

Để có thể truy cập được vào thuộc tính nào đó của bức ảnh. Ví dụ bạn muốn lấy giá trị Width của bức ảnh chẳng hạn. Thì bạn chỉ cần gõ lệnh sau.

thongTinAnh.Width

Trong đó:

  • thongTinAnh: Là giá trị trả về của biến imfinfo();
  • Width: Là thuộc tính của bức ảnh bạn muốn lấy
>> thongTinAnh.Width

ans =

   600

Bạn có thể gán giá trị trả về vào một biến nào đó sau đó dùng biến đó làm một nhiệm vụ mà bạn mong muốn.

Như bạn thấy thì hàm imfinfo sẽ cho bạn biết được rất nhiều thông tin của bức ảnh đó như là Ngày tháng bức ảnh sửa lần cuối, kích thước, định dạng, … Bạn có thể tìm hiểu hàm này qua lệnh dưới đây để biết thông tin chi tiết cũng như giá trị trả về của hàm này

help imfinfo

2. Bài tập mở một hình ảnh nên trong Gui

Tôi và bạn cùng làm một ví dụ nhỏ dưới đây để bạn có thể hiểu rõ hơn các vấn đề mà ta đa học bên trên.

Như hình dưới thì tôi có tạo ra Push Button có string là Mo File Anh. Và một axes để hiện thị hình ảnh. Chắc hẳn thì giao diện này cũng không quá khó khăn đối với bạn đúng không? Cho nên tôi xin phép không hướng dẫn cách tạo giao diện để không làm mất thời gian của bạn.

hien thi anh nen gui matlab
hien thi anh nen gui matlab

Ok bây giờ bạn hãy mở Function của Push Button và tiến hành gõ đoạn code dưới đây.

[tenAnh, duongDanAnh] = uigetfile( ...
                       {'*.jpg;*.png;*.bmp;*.jpeg;*.tif', 'All MATLAB Files (*.jpg, *.png, *.bmp, *.jpeg, *.tif)'; ...
                       '*.*', 'All Files (*.*)'}, ...
                       'Chon Hinh Anh De Mo');

full = strcat(duongDanAnh, tenAnh);

Visible Ẩn Hiện Các Đối Tượng Trong Gui Matlab Bằng Visible

Visible On Visible Off là một thuộc tính sẵn có trên các đối tượng trong lập trình Giao Diện GUI trên phần mền Matlab. Trong bài viếc trước chúng ta đã học đến thuộc tính Enable rồi. Cũng giống thuộc tính đó thì Visible cũng có 2 trạng thái là On (Hiện) và Off (Ẩn).

Visible on off trong gui matlab
Visible on off trong gui matlab

Visible và Enable có gì khác nhau?

Về bản chất thì cả 2 thuộc tính này nếu để off thì sẽ người dùng sẽ không để thao tác gì được trên thuộc tính đó cả. Có một điểm khác nhau rõ ràng nhất đó là. Thuộc tính Enable thì nó vẫn hiện thị trên giao diện nhưng mà nó mờ đối tượng đó chuột sẽ không thao tác được. Còn thuộc tính Visible thì nó sẽ mất hẳn luôn không hiển thị. Bao giờ bạn viết code bật lại đối tượng đó thì no mới hiện nên để người dùng thao tác được.

Visible sử dụng như thế nào?

Mặc định trên tất cả các đối tượng thì thuộc tính này sẽ được bật (On). Bạn có thể Off nó thông qua giao diện hoặc viết code. Ứng dụng của nó và cách sử dụng như thế nào thì tôi và bạn cùng đi qua một ví dụ dưới đây thì bạn sẽ hiểu  nó dùng và hoạt động thế nào?

Giả sử dụng tôi có một giao diện dưới đây. Về các tạo như thế nào để tạo giao diện thì tôi xin không được nhắc lại. Bởi vì bạn học đến phần này thì chắc hẳn nó không quá khó phải không nào?

Visible on off gui matlab
Visible on off gui matlab

Khi chạy trương trình nên thì bạn sẽ được giao diện như thế này

Visible an hien cac doi tuong trong gui matlab
Visible an hien cac doi tuong trong gui matlab

Bạn có thấy không? Giao diện chưa chạy khác và giao diện chạy nên đã khác? Nhóm Tham So và đối tượng Exes1 đã bị biến mất.

Nhiệm vụ của ta trong ví dụ này sẽ như sau: Khi trương trình chạy nên mặc định Nhóm Tham So và Exes1 sẽ biến mất (Ẩn đi). Khi nào nhấn vào Radio Button thì sẽ được hiện nên cho phép bạn thay đổi các thông số đó. Và khi nhấn vào Ve Do Thi thì đồ thị sẽ được hiện nên.

Vậy làm sao ta sử lý được ví dụ này? Chúng ta cùng bắt tay vào làm nhé.

Về giao diện thì bạn hãy tạo ra các đối tượng đầy đủ hết. Đối với các đối tượng bạn muốn ẩn đi thì ta có 2 cách đó là:

Nếu muốn làm trên giao diện:

Bạn nhấn chuột phải vào đối tượng đó chọn Property Inspector tìm đến dòng Visible chọn Off

visible gui matlab
visible gui matlab

Nếu muốn làm trên file .m

Ở ví dụ này thì các đối tượng này sẽ được ẩn đi khi trương trình được chạy nên thì có nghĩa là ta cần phải viết trên function OpeningFcn. Như tôi đã nói ở các bài viết trước thì hàm này mặc định sẽ có trong file .m và nó sẽ được gọi đầu tiên khi trương trình được chạy nên. Cho nên ta sẽ viết các đối tượng cần ẩn đi vào hàm này

set(handles.hieuchinh,'value',0);
set(handles.axes1,'visible','off');
set(handles.pn1,'visible','off');
set(handles.v0,'visible','off');
set(handles.tf,'visible','off');
set(handles.h0,'visible','off');
set(handles.hesonay,'visible','off');
set(handles.text1,'visible','off');
set(handles.text2,'visible','off');
set(handles.text3,'visible','off');
set(handles.text4,'visible','off');

Trong đó:

  • handles.axes1 là truy cập vào đối tượng này. (Các đoạn code khác cũng tượng tự)
  • visible là thuộc tính
  • off là ẩn

Bây giờ ta sẽ sử lý đến các đối tượng khác

Đối tượng Radio Button có string Hieu Chinh

value = get(hObject,'value');
if value ==1
   set(handles.pn1,'visible','on');
   set(handles.v0,'visible','on');
   set(handles.tf,'visible','on');
   set(handles.h0,'visible','on');
   set(handles.hesonay,'visible','on');
   set(handles.text1,'visible','on');
   set(handles.text2,'visible','on');
   set(handles.text3,'visible','on');
   set(handles.text4,'visible','on');
else
   set(handles.pn1,'visible','off');
   set(handles.v0,'visible','off');
   set(handles.tf,'visible','off');
   set(handles.h0,'visible','off');
   set(handles.text1,'visible','off');
   set(handles.text2,'visible','off');
   set(handles.text3,'visible','off');
   set(handles.text4,'visible','off');
end

Trong đó:

  • hObject truy cập vào đối tượng Radio Button Hieu Chinh. Nó tượng đương với câu lệnh handles.hieuchinh. Bởi vì là radio nên nó sẽ có kết quả 1 (Click vào) và 0 (Bỏ click) ta sẽ gán kết quả về biến value
  • Nếu kết quả tra về 1 thì các đối tượng ta đã ẩn sẽ bật nên thành on. Ngược lại nếu kết quả là 0 thì các đối tượng đó sẽ ẩn.

Đối tượng Push Button có string Ve Do Thi

value = get(handles.hieuchinh,'value');

Trong đó: Lấy giá trị của đối tượng có Tag hieuchinh có string là Hieu Chinh

if value ==1
   h0 = get(handles.h0,'string');
   h0 = str2num(h0);
   v0 = get(handles.v0,'string');
   v0 = str2num(v0);
   hesonay = get(handles.hesonay,'string');
   chiso = get(handles.hesonay,'value');
   damping = hesonay{chiso};
   damping = str2num(damping);
   tf = get(handles.tf,'string');
   tf = str2num(tf);
   v = v0;
else
   h0 = 10;
   v = 0;
   t0 = 0;
   dt = 1/1000;
   tf = sqrt(h0)*2.5;
   g=-9.81;
   damping = 0.4;
end

Đoạn code sử lý vẽ đồ thị

t0 = 0;
dt = 1/1000;
g=-9.81;

times = dt:dt:tf;
heights = zeros(size(times));

for idx = 1:length(times)
   newh = h0 + (v+g*dt/2)*dt;
   v = v + g*dt;
   
   if newh < 0
      newh = 0;
      v = -v*sqrt(damping);
   end
   heights(idx) = newh;
   h0 = newh;
end

plot(times,heights);
xlabel('Time [Secs]')
ylabel('Height [meters]')

Đây là bài toán vẽ đồ thị về đường đi của một quả bóng chẳn hạn khi ta ném từ trên xuống thì đường đi sẽ như thế nào. Cho nên bài toán sẽ như vậy. Tôi không thể nào giải thích được hết tất cả các đoạn code ở trên được cho bạn được bời vì quá dài. Chính vì điều này tôi sẽ để link tải code của bài toán này cho bạn tham khảo.

Mấu chốt của bài học hôm nay đó la ta học cách sử dụng thuộc tính Visible thông qua dòng lệnh dưới đây

set(handles.doiTuongCanAnHien, 'visible', 'on');

Tùy bài toán cụ thể thì bạn sẽ áp dụng nó như thế nào thôi.

Download Code

Tổng Kết:

Trên đây chúng ta đã học các sử dụng Visible cho các đối tượng của ta cũng như biết được nó áp dụng dùng để làm gì. Nếu bạn có thắc mắc gì thì có thể đặt câu hỏi phía dưới VuTienIT xin được trả lời. Chúc bạn thành công!

hinhAnh = imread(full);
imshow(hinhAnh);

Trong đó:

  • imread: Đọc Ảnh
  • imshow: Hiện thị ảnh. Nếu bạn không biết 2 câu lệnh này thì bạn hãy quay lại xem bài 1 tôi đã nói rồi.
  • Ở đây vì ta chỉ cho người dùng lựa chọn hình ảnh nên ta để các định dạng có đuôi là jpg, png, bmp, jpeg, tif. Bạn nhớ phải để ký tự *. ở đằng trước của mỗi định dạng. Như vậy Matlab mới hiểu được.
  • tenAnh, duongDanAnh: Là 2 biến được trả về khi sử dụng hàm uigetfile. Sau đó ta nối 2 biến này lại với nhau ta được 1 đường dẫn hoàn chỉnh tới file đó.

Bạn hãy chạy thử trương trình nên xem kết quả như thế nào nhé.

doc va hien thi anh trong matlab
doc va hien thi anh trong matlab

Tổng Kết:

Như vậy tôi và bạn đã cùng nhau học cách hiện thị bức ảnh nào đó nên Gui và học thêm được một số câu lệnh hỗ trợ việc lấy thông tin ảnh cũng như đọc hiện thị ảnh.  Trong bài viết sau chúng ta cùng nhau tìm hiểu thêm một số câu lệnh để sử lý ảnh trong Matlab. Hi vọng bài viết này sẽ giúp ích cho bạn! Chúc bạn thành công!

 

0 0 bỏ phiếu
Đánh giá bài viết

Thủ Thuật Windows

Nếu như trong quá trình bạn tải file Active về mà bị thông báo là "tệp chứa virus" và bị xóa thì hãy làm theo các bước sau trước khi tải về nhé:

Bước 1: Tắt Windows Defender (Win 10), bạn hãy làm theo các bước này để tắt Defender tạm thời nhé, sau khi Active xong, bạn có thể bật lại:
1. Mở ứng dụng Settings.
2. Trên cửa sổ Settings, bạn tìm và click chọn Update & security.
3. Tiếp theo click chọn Windows Defender.
4. Chuyển trạng thái tùy chọn Real-time protection sang OFF.

Bước 2: Ngoài ra, Nếu trong quá trình tải về mà bạn dùng trình duyệt Chrome hay Cốc Cốc thì sau khi file tải xong không được bấm "Hủy" mà bạn nên bấm tổ hợp phím “Ctrl + J” để vào phần quản trị download, tìm đến file mà bạn tải rồi click vào ô “Khôi phục tệp…” nhé.

Có một số trường hợp file Active tải về mặc định bị xóa, nếu gặp trường hợp này bạn cần chắc chắn rằng Windows Defender hay phần mềm diệt virus trên máy đã được tắt. Sau đó bạn bấm “Ctrl +J“, tại link tải active mà bạn vừa tải về đã bị xóa, bạn hãy click vào đó để trình duyệt tải lại một lần nữa và lần này là sẽ thành công.

BQT: VuTienBlog

Subscribe
Thông báo
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các ý kiến
Top
11
0
Bác có thắc mắc? Nhấn vào đây để bình luận!x
()
x