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.