OpenCV中的saturate操作(饱和操作)究竟是怎么回事?

OpenCV中的saturate操作(饱和操作)究竟是怎么回事?

OpenCV会对一些运算结果作饱和操作,那么什么是饱和操作呢?

用实际例子试一下就知道了。

我们用CV_8U类型来试下,CV_8U的数值范围大家都知道为0~255。

试验例子一:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;


int main()
{

	cv::Mat A1(2, 3, CV_8UC1, cv::Scalar(254));
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	cv::Mat B1(2, 3, CV_8UC1, cv::Scalar(2));
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	cv::Mat C1;
	cv::add(A1, B1, C1);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	return(0);
}

运行结果如下:
在这里插入图片描述
如果没有saturate操作(饱和操作),结果应该是256,但因为输出矩阵的类型也为CV_8U,而CV_8U的范围为0~255,所以值因为饱和操作被置为了255。

试验例子二:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;


int main()
{

	cv::Mat A1(2, 3, CV_8UC1, cv::Scalar(254));
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	cv::Mat B1(2, 3, CV_8UC1, cv::Scalar(2));
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	cv::Mat C1;
	cv::subtract(B1, A1, C1);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	return(0);
}

运行结果如下:
在这里插入图片描述
如果没有saturate操作(饱和操作),结果应该是-252,但因为输出矩阵的类型也为CV_8U,而CV_8U的范围为0~255,所以因为饱和操作被置为了0。

通过这两个例子,大家就应该理解知道了OpenCV中的saturate操作(饱和操作)究竟是怎么回事了吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值