Check these out next
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Chương trình Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ, được viết bằng ngôn ngữ java
Chương trình Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ, được viết bằng ngôn ngữ java
Môi trường làm việc với OpenCV
- Linux [bài viết sử dụng Ubuntu 16.04]
- OpenCV [bài viết sử dụng OpenCV 3.4.1]
- Python [bài viết sử dụng Python 3.5.5]
- Ảnh mẫu để xử lý [bài viết sử dụng ảnh img_3.jpg]
img_3.jpg
Bạn có thể download ảnh mẫu về.
Thiết kế hàm biến đổi mức sáng
Thông thường người ta cho điều chỉnh mức sáng các pixel trong ảnh theo công thức sau:
\[g[x,y] = a*f[x,y] + b\].
- a, b: hằng số do mình chọn.
- f[x,y]: mức sáng của pixel trong ảnh tại điểm có tọa độ [x,y].
- g[x,y]: mức sáng của pixel trong ảnh tại điểm có toạ độ [x,y] sau khi biến đổi.
Nói cách khác, \[f\] là ảnh ban đầu, còn \[g\] là ảnh sau biến đổi!
- Ảnh xám thì ta ám dụng công thức trên cho 1 kênh ảnh [vì ảnh xám chỉ có 1 kênh]
- Đối với ảnh màu ta cũng sẽ áp dụng tương tự trên đồng lọat 3 kênh Red, Green, Blue
Ví dụ minh họa: Cho ảnh F [ma trận] 3x3 có các mức sáng [giá trị] sau:
35 6 1
46 24 178
49 65 42
Áp dụng hàm biến đổi \[g[x,y] = 5*f[x,y] + 20\], ta được ảnh G như sau:
195 50 25
250 140 910
265 345 230
Vì mức sáng trong ảnh chỉ nằm trong đoạn [0, 255] vì vậy ảnh G sẽ là:
195 50 25
250 140 255
255 255 230
Ok, lý thuyết vậy đủ rồi. Thực hành với OpenCV thôi!
Chỉnh mức sáng bằng OpenCV code Python
opencv_brightness.py
import sys
import cv2
import numpy as np
def change_brightness[img, alpha, beta]:
img_new = np.asarray[alpha*img + beta, dtype=int] # cast pixel values to int
img_new[img_new>255] = 255
img_new[img_new