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);
这里加了数据溢出保护,图像显示如下:
如果不加溢出保护的话:
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);
会出现数据溢出,图像显示如下:
本示例引用于:https://blog.****.net/mjlsuccess/article/details/12401839