OpenCV-saturate_cast
2014-06-26 19:10
337 查看
OpenCV学习--saturate_cast防止数据溢出
在OpenCV学习中经常看见saturate_cast的使用,下面的代码会展示它的作用,详细的代码可以参见文章http://blog.csdn.net/mjlsuccess/article/details/12400787
[cpp] view
plaincopy
//使用图像混合例子中的C语言版本演示
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
// dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
}
}
imshow("output2",dst);
[cpp] view
plaincopy
这里加入了溢出保护,结果如下
![](http://img.blog.csdn.net/20131007201735578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWpsc3VjY2Vzcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
[cpp] view
plaincopy
//没加入溢出保护
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
dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
}
}
imshow("output2",dst);
![](http://img.blog.csdn.net/20131007203100875)
大致的原理应该如下
[cpp] view
plaincopy
if(data<0)
data=0;
else if(data>255)
data=255;
在OpenCV学习中经常看见saturate_cast的使用,下面的代码会展示它的作用,详细的代码可以参见文章http://blog.csdn.net/mjlsuccess/article/details/12400787
[cpp] view
plaincopy
//使用图像混合例子中的C语言版本演示
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
// dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
}
}
imshow("output2",dst);
[cpp] view
plaincopy
这里加入了溢出保护,结果如下
[cpp] view
plaincopy
//没加入溢出保护
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
dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
}
}
imshow("output2",dst);
大致的原理应该如下
[cpp] view
plaincopy
if(data<0)
data=0;
else if(data>255)
data=255;
相关文章推荐
- OpenCV学习--saturate_cast防止数据溢出
- OpenCV学习--saturate_cast防止数据溢出
- 聊一聊OpenCV的saturate_cast防溢出
- opencv2.0 saturate_cast<?> 研究
- opencv学习日常之“Saturation Casting“转换saturate_cast<>()
- OpenCV学习--saturate_cast防止数据溢出
- OpenCV学习--saturate_cast防止数据溢出
- opencv之saturate_cast模板函数
- Opencv之saturate_cast防止数据溢出
- opencv中的saturate_cast数据溢出保护
- OpenCV学习--saturate_cast防止数据溢出
- 【Opencv】saturate_cast防止数据溢出
- OpenCV学习二:指针操作、saturate_cast
- opencv实现多图像读取并显示,sprintf_s函数,static_cast
- opencv实现多图像读取并显示,sprintf_s函数,static_cast
- saturate_cast 图像对比度与亮度
- saturate_cast
- opencv函数之saturate_cast(防止溢出)
- saturate_cast的作用
- saturate_cast<uchar>(int v)的作用