Lập trình OpenCV C++ Bài 6 : Kỹ thuật xử lý độ sáng cho ảnh
Hi, xin chào các bạn
Chúng ta sẽ tiếp tục bài kế tiếp trong chủ đề lập trình OpenCV C++
Bài hôm nay chúng ta sẽ thực hiện: xử lý độ sáng cho ảnh
Là một kỹ thuật hết sức cơ bản, phổ biến cho một tấm ảnh
Nó giúp bạn điều chỉnh độ sáng tối cho ảnh.
Step 1: Tạo một icon trên toolbar cho chức năng
Cũng tương tự như những bài trước, các bạn hãy tạo 1 icon cho chức năng điều chỉnh độ sáng
Sau đó cũng viết hàm xử lý chức năng tại lớp mainframe tương tự như các bài trước
Step 2: Xây dựng dialog điều chỉnh giá trị sáng tối.
Không giống như những bài trước, điều chỉnh sáng tối cần có giá trị thông số được nhập vào
điều chỉnh sáng là một giá trị dương
còn điều chỉnh tối là một giá trị âm
Giá trị gốc ban đầu sẽ là 0.0
Do đó chúng ta sẽ thiết kế một dialog như sau
a. Tạo một dialog trong folder resource của project
Các bạn click chuột phải và chọn insert dialog như sau
Chúng ta sẽ thiết kế một dialog dạng như sau
Về cách thiết kế một dialog trong lập trình MFC,
có thể nhiều bạn chưa biết vì chưa học về mảng lập trình này
Các bạn có thể tham khảo seri học lập trình mfc trên blog của mình : =====> Click here
+ Các bạn đặt tên ID của dialog là : IDD_DLG_SETTING (để sau này còn dùng thêm các tham số khác cho xử lý ảnh)
+ Tạo 2 button tăng giảm giá trị với ID minh họa trên ảnh
+ Tạo một label và một edit box có tên ID như ví dụ trên ảnh
Như vậy chức năng của dialog đó là.
Khi ấn vào icon trên toolbar, dialog sẽ được gọi, với giá trị mặc định ban đầu là 0.0
Nếu các bạn ấn vào button +, giá trị sẽ tăng têm 10, sau đó ấn ok thi các bạn sẽ thấy ảnh được sáng hơn
Ngược lại các bạn ấn vào button -, giá trị giảm thêm 10, và sau đó ấn ok thì ảnh sẽ bị tối dần đi.
Ngoài việc tăng giảm giá trị theo button, các bạn cũng có thể nhập trực tiếp.
b. Xây dựng lớp quản lý cho dialog, và các biến quản lý cho các control
Chuột phải vào dialog, các bạn chọn item add class
Sau đó đặt tên lớp ví dụ như sau, rồi bấm finish.
Các bạn sẽ lớp quản lý cho dialog được xuất hiện
Trở lại phần dialog, tiếp tục tạo biến quản lý cho các control
Các bạn add btn_decre cho button –
Tương tự add biến edt_adjust_light_ cho control edit box
Và sau đó add tương tự biến btn_incre_ cho button +
c. Tạo các hàm xử lý cho lớp dialog
Viết một hàm BOOL OnIntDialog () để thiết lập các giá trị ban đầu
Hàm này là hàm được tự động gọi khi dialog được show nên không cần khai báo ánh xạ thông điệp
Trong hàm này chúng ta thiết lập giá trị ban đầu cho edit box là 0.0 như sau.
Chúng ta khai báo một biến quản lý giá trị trong edit box, gán giá trị khởi tạo cũng là 0.0
Thực hiện xử lý cho button –
Click double vào button – , chương trình sẽ tự động tạo ra một hàm xử lý cho riêng nó,
các bạn tăng giá trị của biến lên
Và sét lại giá trị vào edit box
Tương tự như vậy với button +, các bạn tăng giá trị lên.
Viết tiếp một hàm trả ra giá trị trên edit box()
Ok, đến đây là xong phần xử lý cho dialog, các bạn build chương trình và đảm bảo không có lỗi, nếu có lỗi hay xem lỗi gì và sửa
Step 3. Thực hiện xử lý sáng tối cho ảnh.
Các bạn quay trở lại lớp mainframe và tại hàm AdjustLight
Chúng ta tiến hành gọi dialog vừa thiết kế ở trên
Tất nhiên hàm AdjustLight của lớp Document là chưa có, và giờ chúng ta sẽ định nghĩa hàm đó
Các bạn sẽ định nghĩa một hàm AdjustLight bên lớp Document và xử lý độ sáng cho ảnh như sau.
Các bạn nhớ khởi tạo cả bên file .h
Về cơ bản việc xử lý độ sáng của ảnh sẽ được thông qua hàm convertTo của lớp cv::Mat
Đối số cuối cùng của hàm này chính là đối số dành cho độ sáng tối, và chúng ta truyền giá trị setting trên dialog vào đối số này.
Các bạn build và chạy thử chương trình.
Khi bấm vào icon mặt trời, sẽ thấy dialog được show lên như sau
Kết quả test với giá trị +70
Và kết quả test với -50
OK, như vậy đến bước này các bạn có thể thành công, và nếu bạn có kinh nghiệm về mfc,
bạn có thể thiết kế giao diện cho phần xử lý ánh sáng này một cách linh động hơn so với việc thiết kế bằng dialog.
Ví dụ như điều chỉnh ánh sáng bằng slider control trên 1 form view chẳng hạn.
Ok. End