opencv saturate_cast使用详解

功能描述

在opencv中,saturate_cast的作用是防止数据溢出,作出保护。原理可理解为如下代码功能:

if(data < 0)
     data = 0;
else if(data > 255)
	 data = 255;

示例

for (int i=0; i<src1.rows; i++)
{
	const uchar* src1_ptr = src1.ptr<uchar>(i);
	const uchar* src2_ptr = src2.ptr<uchar>(i);
	uchar* dst_ptr  = dst.ptr<uchar>(i);
	for (int j=0; j<src1.cols*nChannels; j++)
	{
		dst_ptr[j] = saturate_cast<uchar>(src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);//gama = -100, alpha = beta = 0.5
	}
}
imshow("output2",dst);

这里加了数据溢出保护,图像显示如下:

opencv saturate_cast使用详解

如果不加溢出保护的话:

for (int i=0; i<src1.rows; i++)
{
	const uchar* src1_ptr = src1.ptr<uchar>(i);
	const uchar* src2_ptr = src2.ptr<uchar>(i);
	uchar* dst_ptr  = dst.ptr<uchar>(i);
	for (int j=0; j<src1.cols*nChannels; j++)
	{
		dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);//gama = -100, alpha = beta = 0.5
	}
}
imshow("output2",dst);

会出现数据溢出,图像显示如下:

opencv saturate_cast使用详解

本示例引用于:https://blog.csdn.net/mjlsuccess/article/details/12401839