Lập trình OpenCV C++ Bài 7 : Kỹ thuật crop ảnh
Hi, chào các bạn.
Chúng ta tiếp tục chủ đề : Lập trình OpenCV C++.
Bài số hôm nay chúng ta sẽ cùng tìm hiểu về kỹ thuật cắt xén ảnh, hay còn được gọi là crop ảnh.
Khi một tấm ảnh có kích thước quá lớn, bạn muốn cắt gọt nhỏ lại, bỏ đi những phần hình ảnh không cần thiết.
Thì chức năng crop ảnh được tạo ra phục vụ cho mục đích này.
Trong các phần mềm đồ họa, như paint, photoshop… đều có chức năng crop ảnh.
Ok. chúng ta bắt đầu đi vào xử lý chức năng này.
Step 1: Tạo icon chức năng
Cũng giống như bài trước, các bạn tạo một icon chức năng như sau:
Tôi tạo icon đơn giản thôi nhé, các bạn muốn đẹp hơn thì phải kỳ công hơn.
Sau đó các bạn viết hàm nhận sự kiện chức năng tại lớp Mainframe như sau:
Step 2: Viết hàm xử lý chức năng crop ảnh:
Đây là phần định nghĩa hàm, và các bạn đừng quên khởi tạo nó bên file header
(lưu ý đây ko phải hàm nhận sự kiện, nên các bạn đừng lầm tưởng phải gọi ánh xạ thông điệp giống như hàm bước 1)
Chúng ta cùng phân tích đoạn code xử lý trên.
– Đầu tiên tôi tạo ra một vùng rect để làm vùng crop, với kích thước là 400, 400, vị trí băt đầu crop là điểm có tọa độ (10, 10)
Như vậy tại bước này, tôi đang để cứng giá trị.
Khi thực hiện các dự án thực tế, ko ai làm vậy cả, mà cần có sự linh hoạt.
Điểm crop sẽ được nhập từ vị trí click chuột, kích thước vùng rect sẽ được lấy từ nhiều cách
+ Có thể nhập số liệu bằng tay trên dialog
+ Có thẻ là phạm vi cùa vùng kéo chuột.
+ Có thể là kích thước của vùng minh họa crop được tạo ra trên tấm ảnh.
Và đó là những kỹ thuật thực tế, cần nhiều thời gian hơn, nhưng không phải là quá khó.
Và kỹ thuật đó tôi để lại cho các bạn tự thực hành, tự nghiên cứu sáng tạo cách làm.
– Thứ 2 là tôi cần lấy được kích thước width và height của anh, để tôi kiểm tra.
Tôi cần kiểm tra vùng crop có nhỏ hơn kích thước ảnh hay không ?.
Chỉ khi nhỏ hơn kích thước ảnh, tôi mới cho phép cắt ảnh.
– Sau đó rất đơn giản, các bạn chỉ việc gán vùng kích thước mới cho biến m_Mat, tự động nó sẽ được crop.
Sau khi crop thì ta được một đối tượng Mat mới, và ta gán lại cho biến m_Mat để nó update về kích thước mới.
Và thực hiện show nó lên màn hình windows.
Step 3: Gọi hàm xử lý crop của lớp Doc tại lớp Mainframe.
Lúc này hàm xử lý chức năng đã xong, ta chỉ việc gọi nó trong hàm xử lý sự kiện.
Các bạn build và chạy thử chương trình, sẽ có kết quả như sau
Trước khi crop ảnh
Sau khi crop ảnh.
Tạm thời các bạn chấp nhận kéo windows nhỏ lại cho vừa tấm ảnh bằng tay.
Sau này mình sẽ chia sẻ các windows tự động thu gọn với kích thước ảnh.
Ok, kỹ thuật crop ảnh không có gì quá phức tạp.
Mà sự phức tạp sẽ nằm ở cách thiết kế cho chức nằng này
Sao cho linh hoạt nhất, dễ sử dụng nhất.