OpenCV中的saturate操作(饱和操作)究竟是怎么回事?
用两个实际例子试一下就知道了。
我们用CV_8U类型来试下,CV_8U的范围为0~255
第一个例子:
//OpenCV版本:3.0.0 //VS版本:2013 //博主微信/QQ 2487872782 //有问题可以联系博主交流 //有图像处理开发需求也请联系博主 //图像处理技术交流QQ群 271891601 #include#include 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); }
运行结果如下:
按道理,结果应该是256,但因为输出矩阵的类型也为CV_8U,而CV_8U的范围为0~255,所以值被置为了255。
第二个例子:
//OpenCV版本:3.0.0 //VS版本:2013 #include#include 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); }
运行结果如下:
按道理,结果应该是-252,但因为输出矩阵的类型也为CV_8U,而CV_8U的范围为0~255,所以值被置为了0。
通过这两个例子,大家就应该理解知道了OpenCV中的saturate操作(饱和操作)究竟是怎么回事了吧。



