Lập trình OpenCV C++ Bài 4: Xoay ảnh theo các góc cơ bản

Hi. xin chào các bạn.

Chúng ta tiếp tục với bài học tiếp theo trong chủ đề : Học lập trình C++ Opencv 

Chúng ta sẽ cùng học cách xử lý quay ảnh theo các góc.

Step 1. Tạo icon chức năng

Trên thanh toolbar tạo icon để thực hiện chức năng, ấn vào icon thì quay phải 1 góc 90 độ.

Các bạn mở Resource view lên rồi mởi project ra,

sau đó mở folder toolbar và chọn IDR_MAINFRAME_256

 

Sau đó các bạn tạo 1 icon đơn giản như sau, đặt tên ID = ID_ROT_LEFT

 

Step 2: Tạo hàm xử lý sự kiện

Tạo hàm xử lý khi click vào button, và ánh xạ thông điệp.

Đến đây các bạn có thể build và chạy thử, nếu thành công icon rot left sẽ được sáng lên

 

Step 3. Viết hàm xử lý chức năng xoay góc

Chúng ta viết tiếp hàm RotateLeft tại lớp Doc để thực hiện xử lý chính.

Lớp mainframe chỉ thực hiện nhận xử lý sự kiện từ toolbar

Các bạn viết tương tự như lớp main frame như minh họa sau

Sau đó tại lớp Mainframe sẽ gọi tới hàm của lớp Doc như sau

Nhớ gọi include lớp Doc bên mainframe.h

 

Thực hiện xử lý coding quay góc cho ảnh bên hàm RotateLeft bên lớp document.

Thực hiện tạo hàm lấy view để update view khi xử lý ảnh

Thực hiện định nghĩa hàm GetCurrentActiveView()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Đoạn code xử lý quay góc 90 sang theo chiều bên trái (ngược chiều kim đồng hồ) cho ảnh

void OpenCVGUIDoc::RotateLeft()
{
  cv::Mat src = m_Mat;
  cv::Mat dst;
  cv::Point2f pt(src.cols / 2., src.rows / 2.);
  cv::Mat r = getRotationMatrix2D(pt, 90.0, 1.0);
  warpAffine(src, dst, r, cv::Size(src.cols, src.rows));
  m_Mat.release();
  m_Mat = dst.clone();
  dst.release();
  if (GetCurrentActiveView())
  {
    GetCurrentActiveView()->InvalidateRect(NULL);
  }
}

Nguyên lý quay góc 90 độ đó là:

Xác định điểm gốc để quay, điểm quay là được tính là điểm trung tâm của tấm ảnh

==> quay xung quanh tấm ảnh

Sau đó sử dụng hàm getRotationMatrix2D

Đối số truyền vào là :  điểm quay, giá trị góc quay, và tỉ lệ (để mặc định là 1.0)

Sau đó lấy kết quả được trả ra và gán lại vào biến m_Mat  rồi chuyển sang update view để hiện thị kết quả.

Ok, đến đây các bạn có thể build và test thử chương trình, kêt quả sẽ được như sau

 

 

Đến đây là các bạn đã thành công.

Các bạn hãy thử áp dụng và làm cho chiều ngược lại quay sang phải 1 góc bội số của 90 độ

Và sau đó làm một chức năng có thể quay một góc bất kỳ cho tấm ảnh.

 

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.