一文彻底看懂OpenCV的setTo()函数


写在前面

本文主要介绍OpenCV中的setTo()函数。

函数介绍

可以直接在 OpenCV参考文档 中查阅:
在这里插入图片描述


函数功能演示

通过查阅源码,我们可以看到setTo()函数的原型如下:

 /** @brief Sets all or some of the array elements to the specified value.

    This is an advanced variant of the Mat::operator=(const Scalar& s) operator.
    @param value Assigned scalar converted to the actual array type.
    @param mask Operation mask of the same size as \*this. Its non-zero elements indicate which matrix
    elements need to be copied. The mask has to be of type CV_8U and can have 1 or multiple channels
     */
    Mat& setTo(InputArray value, InputArray mask=noArray());

用法如下:

src.setTo(value, mask);

当默认不添加mask的时候,表明mask是一个与原图尺寸大小一致的且元素值全为非0的矩阵,因此不加mask的时候,会将原矩阵的像素值全部赋值为value;当带有mask这个参数的时候,该函数会把矩阵mask中元素不为0的点全部变为value值(下面详述该函数带参形式的用法)。

首先,mask是一个和src同 size 的矩阵,该函数的功能,是针对图像矩阵src,在矩阵src中,把矩阵mask中元素不为0的相应像素点位置的像素值全部变为value1;也即对于mask非零的位置,在src中的对应位置的元素会被置为value值,其他部分不变2

如果根据例子的话,或许更好理解这个函数的原理,现举例说明如下:

#include<stdio.h>
#include<opencv2/opencv.hpp>

int main() {

	cv::Mat src = (Mat_<uchar>(3, 3) << 0, 100, 0, 0, 205, 160, 0, 0, 0);

	cv::Mat mask = (Mat_<uchar>(3, 3) << 0, 120, 0, 150, 0, 130, 0, 0, 0);

	src.setTo(0, mask);


	std::cout << src << std::endl;

	return 0;
}

通过Image Watch这个插件,我们可以看到经过setTo()函数前后,图像src像素值的变化:


setTo()函数处理前:
在这里插入图片描述


setTo()函数处理后:
在这里插入图片描述
通过这个案例可以发现,setTo()函数相当于是给图像src加了一个mask蒙版,mask中不为0的像素点位置,在图像src中的相应位置都要置为0或其他自定义的value值。


至此,想必各位已经对setTo()函数有了一个相当清晰的了解,写到这里,差不多本文也就要结束了,之所以会选择写这篇文章,是因为本人在学习setTo()这个函数时,发现网上的讲解并不是很清晰,对于小白并不是很友好,后来自己动手实践了后,才将其差不多搞明白,遂将其记录之,以助后人。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。


参考文章


  1. 007-Opencv基础: Mat类里setTo函数详解 ↩︎

  2. OpenCV4 中图像容器Mat以及矩阵的一些运算 ↩︎

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值