在OpenCV学习中经常看见saturate_cast的使用,下面的代码会展示它的作用,详细的代码可以参见文章http://blog.csdn.net/mjlsuccess/article/details/12400787

  1. //使用图像混合例子中的C语言版本演示
  2. for (int i=0; i<src1.rows; i++)
  3. {
  4. const uchar* src1_ptr = src1.ptr<uchar>(i);
  5. const uchar* src2_ptr = src2.ptr<uchar>(i);
  6. uchar* dst_ptr = dst.ptr<uchar>(i);
  7. for (int j=0; j<src1.cols*nChannels; j++)
  8. {
  9. dst_ptr[j] = saturate_cast<uchar>(src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);//gama = -100, alpha = beta = 0.5
  10. // dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
  11. }
  12. }
  13. imshow("output2",dst);

这里加入了溢出保护,结果如下

  1. //没加入溢出保护
  2. for (int i=0; i<src1.rows; i++)
  3. {
  4. const uchar* src1_ptr = src1.ptr<uchar>(i);
  5. const uchar* src2_ptr = src2.ptr<uchar>(i);
  6. uchar* dst_ptr = dst.ptr<uchar>(i);
  7. for (int j=0; j<src1.cols*nChannels; j++)
  8. {
  9. // dst_ptr[j] = saturate_cast<uchar>(src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);//gama = -100, alpha = beta = 0.5
  10. dst_ptr[j] = (src1_ptr[j]*alpha + src2_ptr[j]*beta + gama);
  11. }
  12. }
  13. imshow("output2",dst);

大致的原理应该如下

  1. if(data<0)
  2. data=0;
  3. else if(data>255)
  4. data=255;

openCV中的saturate_cast()方法相关推荐

  1. OpenCV中背景建模方法mog2——Adaptive GMM算法小结

    GMM是网上到处可见且用得最多的背景建模算法,论文上很多相关概率公式,又看了很多博客对于GMM的解释,直到现在还总是觉得很难理解其中的真谛,从各方面整理一下目前自己所理解的内容,如果有理解偏差,欢迎指 ...

  2. 基于C++的opencv中Mat矩阵运算方法总结

    文章目录 前言 一.Mat运算种类 1.1 代数运算 1.2 类型转换 前言 Mat类是目前opencv最为常用的图像数据格式,其优点在于无需手动开辟内存空间和实时释放,针对此类的各种运算方法有很多, ...

  3. OpenCV中的傅里叶的门道

    接触到傅里叶-梅林算法,需要用到傅里叶变换,于是去查了一下OpenCV中的实现方法,没想到习以为常的傅里叶变换之中的门道还不少. //傅里叶变换https://blog.csdn.net/keith_ ...

  4. OpenCV中的归一化

    归一化就是把数据经过处理后限制在某个特定范围内. opencv 中使用 normalize 方法来实现归一化,它的函数原型如下 cv2.normalize(src, dst, alpha=None, ...

  5. opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理

    文章目录 1. 调整图像亮度和对比度的原理 2. python实现的一个代码如下,可以直接运行 3. 在opencv种调节图像和对比度的方法 a. opencv中的实现方法: b. 根据咱们的公式,我 ...

  6. Opencv中常见的滤波方法

    Opencv中常见的滤波方法 - 随性岁分享 - 博客园 opencv:基于opencv的五种滤波方法_M海洋的博客-CSDN博客_opencv滤波 OpenCV3学习(4.2)--图像常用滤波方法( ...

  7. Opencv中三种操作像素的方法

    测试环境:opencv3.1.0 + Visual Studio 2015 + win7 64位 opencv中有3中方法可以访问/修改图像的像素值,分别为: 1.      指针访问 2.      ...

  8. opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别

    opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别在opencv中,.at<uchar>()和.ptr<uchar>() ...

  9. OpenCV中的几种角点检测方法

    1.Harris角点检测 import numpy as np import cv2 as cv import matplotlib.pyplot as pltplt.rcParams['font.s ...

最新文章

  1. datastage 重启
  2. spring data mongo比较两个字段查询
  3. 001——数组(一)数组知识及foreach函数应用
  4. 倒计时1天,盛会将至,长沙 · 1024程序员节全日程曝光(附参会指南)
  5. 2019-02-26-GCN资料
  6. Windows批处理(cmd/bat)常用命令小结
  7. HBuilderX里面创建项目时没有模板解决方案
  8. stm8s + si4463 寄存器配置
  9. Spring MVC异常统一处理的三种方式
  10. 星加坡php开发_PHP 中文简繁互转代码 完美支持大陆、香港、台湾及新加坡
  11. win10html网页运行空白,win10系统Ie浏览器无法打开HTML格式的网页文件的处理秒方...
  12. c语言有理数字符形式,C语言设计实现抽象数据类型有理数基本操作包括有理数的加法,减法,乘法,除法,以及求有理数的分子,分...
  13. 消费金融及物流概念介绍
  14. 深度学习、机器学习、人工智能的区别
  15. python微信公众号秒杀代码_如何在微信公众号编辑Python代码?
  16. 如何获取自己QQ里面的所有qq好友号码
  17. python分割txt文件
  18. 日常用语--打电话(整理)
  19. 大数据的未来在于开放与共享
  20. 微服务架构讲解:那叫一个通俗易懂

热门文章

  1. 蓝牙BLE GATT完全分析和运用
  2. 行内块元素加了文字会被挤下来的原因及解决方法。
  3. 关于gid 与groups 的区别
  4. open /prometheus/queries.active: permission denied(已解决)
  5. 论文笔记——Asynchronous Stochastic Gradient Descent with Delay Compensation
  6. 实战:垂直电商如何撬动“女人腰包”
  7. 一次k8s本地虚拟机挂起导致的etcd数据文件损坏
  8. MySQL介绍-安装-登录
  9. 使用运算放大器制作移相电路
  10. 高斯模糊java代码_JAVA bitmap的高斯模糊代码