OpenCV-数组加权和cv::addWeighted

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

函数原型

void addWeighted(InputArray src1, double alpha, InputArray src2,
                 double beta, double gamma, OutputArray dst, int dtype = -1);

参数说明

  1. InputArray类型的src1,输入的第一个需要加权的图像。
  2. double类型的alpha,第一个数组的权重。
  3. InputArray类型的src2,输入的第二个需要加权的图像。
  4. double类型的beta,第二个数组的权重。
  5. double类型的gamma,加到权重总和上的标量值。
  6. OutputArray类型的dst,输出的数组。
  7. 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叠加至原图上,从效果图可以看出边缘更清晰了~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

© 版权声明
THE END
喜欢就支持一下吧
点赞570 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容