OpenCV-数组加权和cv::addWeighted

Posted 翟大宝Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-数组加权和cv::addWeighted相关的知识,希望对你有一定的参考价值。

函数原型

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叠加至原图上,从效果图可以看出边缘更清晰了~

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

以上是关于OpenCV-数组加权和cv::addWeighted的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 完整例程16. 不同尺寸的图像加法

OpenCV 例程200篇218. 多行倾斜文字水印

OpenCV 例程200篇218. 多行倾斜文字水印

OpenCV-数组加权和cv::addWeighted

opencv图像混合,分离颜色通道多通道图像混合

opencv图像操作