Lập trình OpenCV C++ Bài 3: Tối ưu việc load ảnh

Hello. Chào mừng các bạn đến với chủ đề lập trình OpenCV C++

Chúng ta tiếp tục bài số 3: Tối ưu việc load ảnh bằng opencv

Sau khi thực hành bài số 2, các bạn đã load được ảnh lên trên view

Chúng ta sẽ thực hiện một vài kỹ thuật để việc tối ưu ảnh nó tốt hơn

1. Thực hiện loại bỏ view cho sẵn.

Vì khi các bạn open một tấm ảnh, nó tự động tạo ra một view và đẩy hình ảnh lên view đó,

Do đó view cho sẵn ban đầu chúng ta không cần đến nữa, chúng ta sẽ thực hiện ko cho nó được hiện lên

Các bạn mở file COpenCVGUIApp tại hàm : InitInstance, thêm hai câu lệnh sau:

if (CCommandLineInfo::FileNew == cmdInfo.m_nShellCommand)
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

ok sau đó build và chạy thử, các bạn sẽ thấy không còn view nào xuất hiện nữa

 

2. Thiết lập một kích thước rộng hơn cho view

Các bạn thấy view đang nhỏ ơn so với hình vậy thì có thể thiết lập một kích thước rộng hơn cho view như sau

Trong lớp childFrame các bạn có thể setting size của windows tạo ra

3. Đổi background đen của view sang background dễ nhìn hơn

Tại lớp view khai báo một biến thành viên  CBrush m_brush;

Sang file cpp tại hàm RenderImage chúng ta thêm như sau:

Trong khối block1 chúng ta thêm đoạn xử lý

// Create grid background for document
if (NULL == m_brush.GetSafeHandle())
{
   m_brush.CreateHatchBrush(HS_DIAGCROSS, RGB(190, 190, 190));
}
CBrush* pOldBrush = memDC.SelectObject(&m_brush);
memDC.PatBlt(0, 0, rectClient.right, rectClient.bottom, PATCOPY);

 

 

Sau đó tại hàm hủy của lớp view, chúng ta thực hiện như sau

Build và chạy thử chương trình, các bạn sẽ thấy background của view sẽ dễ nhìn hơn

 

4. Một số tấm ảnh bị load nên thành đen trắng

 

Các bạn viết một hàm như sau tại lớp document

Sau đó chúng ta sẽ gọi hàm này tại vị trí load ảnh. 

Các bạn tìm đến hàm OnOpenDocument(LPCTSTR lpszPathName)

tìm đoạn code sau và gọi hàm ResizeMat(m_Mat)

Ok, đó là các xử lý tối ưu cơ bản.

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.