32 #include <opencv2/imgproc/imgproc.hpp>
38 const cv::Mat& alpha1,
40 const cv::Mat& alpha2)
42 int out_type = src1.type();
43 cv::Mat s1, s2, a1, a2;
44 alpha1.convertTo(a1, CV_32F);
45 alpha2.convertTo(a2, CV_32F);
46 src1.convertTo(s1, CV_32F);
47 src2.convertTo(s2, CV_32F);
49 cv::divide(a1, a1 + a2, w1);
50 cv::Mat w2 = -w1 + 1.0;
52 cv::Mat blended = s1.mul(w1) + s2.mul(w2);
54 blended.convertTo(blended_out, out_type);
59 const cv::Mat& overlay,
63 alpha = std::min(1.0, alpha);
64 alpha = std::max(0.0, alpha);
66 cv::addWeighted(overlay, alpha, base, 1.0 - alpha, 0, blended);
73 const cv::Scalar& color,
76 alpha = std::min(1.0, alpha);
77 alpha = std::max(0.0, alpha);
79 cv::Size size = src.size();
82 if (src.type() == CV_8U)
84 cv::cvtColor(src, color_image, cv::COLOR_GRAY2BGR);
86 else if (src.type() == CV_32F || src.type() == CV_16U)
89 src.convertTo(tmp, CV_8U);
90 cv::cvtColor(tmp, color_image, cv::COLOR_GRAY2BGR);
92 else if (src.type() == CV_32FC3 || src.type() == CV_16UC3)
94 src.convertTo(color_image, CV_8UC3);
96 else if (src.type() != CV_8UC3)
106 cv::Mat overlay(size, CV_8UC3);
107 overlay.setTo(color);
110 cv::Mat overlay_alpha = cv::Mat::zeros(size, CV_32F);
111 overlay_alpha.setTo(alpha, mask);
114 cv::Mat base_alpha(size, CV_32F);
115 base_alpha = 1.0 - alpha;