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);
参数说明
- 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;
}
测试效果
如测试效果所示,将边缘信息乘0.1叠加至原图上,从效果图可以看出边缘更清晰了~
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
以上是关于OpenCV-数组加权和cv::addWeighted的主要内容,如果未能解决你的问题,请参考以下文章