一文彻底看懂OpenCV的setTo()函数
Posted 哈哈哈哈哈嗝哈哈哈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文彻底看懂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(0, mask);
该函数的功能,是针对图像矩阵src
,在矩阵src
中,把矩阵mask
中元素不为0
的相应像素点位置的像素值全部变为value值
1,举例说明如下:
#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()
这个函数时,发现网上的讲解并不是很清晰,对于小白并不是很友好,后来自己动手实践了后,才将其差不多搞明白,遂将其记录之,以助后人。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。
参考文章
以上是关于一文彻底看懂OpenCV的setTo()函数的主要内容,如果未能解决你的问题,请参考以下文章
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略