欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV学习--saturate_cast防止数据溢出

发布时间:2025/4/16 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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
  •   
  • 这里加入了溢出保护,结果如下

    [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)  
  • 总结

    以上是生活随笔为你收集整理的OpenCV学习--saturate_cast防止数据溢出的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。