您当前的位置: 首页 >  opencv

龚建波

暂无认证

  • 3浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV3学习笔记(7):图像混合,addWeighted()

龚建波 发布时间:2020-09-08 00:28:16 ,浏览量:3

0.图像混合

通过addWeighted函数,可以将两张大小和通道相同的图片按照一定比例混合到一起,所有的比例之和为1。

void cv::addWeighted(
  InputArray src1, //图片1
  double alpha,    //混合比例
  InputArray src2, //图片2,其大小和通道与1相同
  double beta,     //混合比例
  double gamma,    //偏差,每次计算加上该值
  OutputArray dst, //输出图片,其大小和通道与输入相同
  int dtype = -1   //输出数组的可选深度;当两个输入数组的深度相同时,可以将dtype设置为-1,这等效于src1.depth()。
)

混合公式,其中I为多维数组的索引:dst(I)=saturate(src1(I)∗alpha+src2(I)∗beta+gamma); (alpha+beta=1) 在多通道阵列的情况下,每个通道都是独立处理的。该函数可以替换为矩阵表达式:dst = src1 * alpha + src2 * beta + gamma; (alpha+beta=1)

通过代码来测试下效果(感觉最麻烦的是大小和类型还得一样):

	Mat raw_1 = imread("F:/Src/add_1.png"); //小狗
	Mat raw_2 = imread("F:/Src/add_2.png"); //数字背景
	Mat dst_1;
	const double alpha = 0.6;
	//开始混合,注意两个图大小类型一致
	addWeighted(raw_1, alpha, raw_2, 1-alpha, 0.0, dst_1);
	imshow("addWeighted", dst_1);

效果如下(原图我直接截图出来的两个大小一样的图):

参考文档: https://docs.opencv.org/3.4.11/d2/de8/group__core__array.html

参考博客:https://blog.csdn.net/weixin_42126427/article/details/106113192

1.图像叠加

利用Mat类的copyTo成员函数可以简单的进行图像叠加:

void cv::Mat::copyTo(
  OutputArray m,   //叠加到哪个图上
  InputArray mask  //掩膜CV_8U类型(有个重载不需要掩膜,完全复制)
)const

测试代码:

	Mat raw_1 = imread("F:/Src/add_1.png"); //小狗
	Mat raw_2 = imread("F:/Src/add_2.png"); //数字背景
	Mat mask;
	//掩膜,把颜色暗淡的剔除
	inRange(raw_1, Scalar(30, 30, 30), Scalar(255, 255, 255), mask);
	//拷贝一份数字背景
	Mat dst_2 = raw_2.clone();
	raw_1.copyTo(dst_2, mask);
	imshow("copyTo", dst_2);

效果如下:

参考博客:https://www.cnblogs.com/qiantao/p/9446869.html

关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.0607s