opencv(三)对图像进行简单算术运算(加减乘除)

opencv可以将图像以不同的方式组合,图像其实就是一般的矩阵,所以它们可以做加减乘除。opencv提供了各种图像算术操作符。

1【首先我们对两幅图像进行操作】

当我们需要一些图像特效或者在图像上叠加信息时,就需要用到图像加法。我们只需调用cv::add函数就可以完成,更准确的说是cv::addWeighted()函数来完成图像的加法。cv::addWeighted(image, 0.7, imag1, 0.9, 0.,result);

效果如下


所有的二值算术函数工作方式都是一样的,他接受两个输入变量和一个输出变量。在一些情况下,还需要指定权重作为运算中的标量因子。每种函数都有几个不同的形式:

//c[i] = a[i] + b[i];

cv::add(imageA, imageB, resultC);

//c[i] = a[i] + k;

cv::add(imageA, cv::Scalar(k), resultC);

//c[i] = k1 * a[i] + k2 * b[i] + k3;

cv::addWeighted(imageA, k1, imageB, k2, k3, resultC);

//c[i] = k * a[i] + b[i];

cv::scaleAdd(imageA, k,imageB,resultC);

//对某些函数,还可以指定一个图像的掩模

//if(mast[i]) c[i] = a[i] + b[i]

cv::add(imageA,imageB, resultC, mask);

参与运算的图像必须相同的大小和类型(输出图像如果合适不符,那么他会被重新分配)同样,由于运算是逐像素进行的,输入图像之一也可以作为输出图像。

opencv给我们重载了操作符,上面的操作可以换成下面:reslut = 0.7 * image + 0.9 * image,效果是一样的。有时候我们想对彩色图像的一个通道进行运算,我们可以使用cv::split函数将彩色图像的三个通道分别拷贝到三个独立的cv::Mat实例中,然后对其中一个通道单独处理:

std::vector(cv::Mat) planes;

cv::split(image, planes);

planes[0] += image1;

cv::merge(planes, result);

函数cv::merge是cv::splitr的对偶运算,它将三个单通道合并一个彩色通道。

其他操作基本都和加运算差不多,这里就不一一介绍了。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木士易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值