Blend màu ảnh là trộn 2 ảnh lại với nhau với 1 tỉ lệ do người dùng chọn. Cần có 2 tham số là tỉ lệ alpha của ảnh thứ nhất và beta của ảnh thứ 2. Các giá trị này trong khoảng từ [0;1].
Trong photoshop thì blend màu là trộn ảnh gốc với 1 màu nào đó để tạo hiệu ứng. Ảnh bên dưới lấy nguồn từ VietDesigner.net
Để blend sử dụng hàm cv::addWeighted
Blend ảnh có cùng size
1 2 3 4 5 |
cv::Mat mat1 = cv::imread("img1.jpg"); cv::Mat mat2 = cv::imread("img2.jpg"); cv::Mat dst = cv::Mat(mat1.size(), CV_8UC3); float beta = 1.f - alpha; cv::addWeighted(mat1, alpha, mat2, beta, 0.0, dst); |
Ảnh sau khi blend
Blend ảnh khác size
Ảnh nhỏ sẽ nằm trong ảnh lớn, đọc bài Xử lý một phần hình ảnh bằng ROI để hiểu thêm.
Phương pháp này tạo 1 ảnh trung gian có kích cỡ bằng ảnh lớn và chứa ảnh nhỏ. Sau đó ghép ảnh trung gian và ảnh lớn để được ảnh output.
Giả sử rằng mat2 lớn hơn mat1
1 2 3 4 5 6 7 8 9 10 11 12 13 |
float alpha = 0.2; float beta = 1.f - alpha; cv::Mat mat1 = cv::imread("img1.jpg"); cv::Mat mat2 = cv::imread("img2.jpg"); cv::Mat dst = cv::Mat(mat2.size(), CV_8UC3); cv::Mat matTemp = cv::Mat(mat2.size(), CV_8UC3); cv::Rect roi = cv::Rect(0, 0, mat1.cols, mat1.rows); mat1.copyTo(matTemp(roi)); cv::addWeighted(mat2, alpha, matTemp, beta, 0.0, dst); |
Kết quả sau khi blend