函数原型
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
参数说明
InputArray类型的src1,输入的第一个需要加权的图像。
double类型的alpha,第一个数组的权重。
InputArray类型的src2,输入的第二个需要加权的图像。
double类型的beta,第二个数组的权重。
double类型的gamma,加到权重总和上的标量值。
OutputArray类型的dst,输出的数组。
int类型的dtype,输出阵列的可选深度,默认值-1。
测试代码
#include<iostream> #include<opencv2/opencv.hpp> #include<ctime> using namespace std; using namespace cv; int main(void) { cv::Mat test = imread("long.jpg"); cv::Mat result, result2; result = cv::Mat::zeros(test.size(), test.type()); // 尺寸扩大+双边滤波 cv::resize(test, result, cv::Size(0, 0), 4, 4, 2); cv::bilateralFilter(result, result2, 25, 30, 15, 4); imshow("result", result2); // 图像边缘处理 Mat blur, usm; Mat grad_x, abs_grad_x, grad_y, abs_grad_y; Scharr(result2, grad_x, CV_16S, 1, 0, 1, 0, BORDER_DEFAULT); convertScaleAbs(grad_x, abs_grad_x); Scharr(result2, grad_y, CV_16S, 0, 1, 1, 0, BORDER_DEFAULT); convertScaleAbs(grad_y, abs_grad_y); // 边缘同原图加权叠加 addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, blur); imshow("blur", blur); addWeighted(result2, 1, blur, 0.1, 0, usm); imshow("add-blur", usm); waitKey(0); system("pause"); return 0; }
测试效果
图1 原图
图2 边缘提取
图3 边缘叠加
如测试效果所示,将边缘信息乘0.1叠加至原图上,从效果图可以看出边缘更清晰了~
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!