首先举个例子:

uchar a = saturate_cast<uchar>(-100); // a = 0 (UCHAR_MIN)
short b = saturate_cast<short>(33333.33333); // b = 32767 (SHRT_MAX)

在图像处理方面,无论是加是减,乘除,都会超出一个像素灰度值的范围(0~255),saturate_cast函数的作用即是:当运算完之后,结果为负,则转为0,结果超出255,则为255。

举一个拉普拉斯锐化的例子:对于求一个锐化后的像素点(sharpened_pixel),这个基于拉普拉斯算子的简单算法主要是遍历图像中的像素点,根据领域像素确定其锐化后的值,计算公式:sharpened_pixel = 5 * current – left – right – up – down ;

#include <iostream>
#include<core/core.hpp>
#include<highgui/highgui.hpp>
using namespace cv;void sharpen(const Mat& img, Mat& result)
{result.create(img.size(), img.type());//处理边界内部的像素点, 图像最外围的像素点暂不处理for (int row = 1; row < img.rows - 1; row++){//前一行像素点const uchar* previous = img.ptr<const uchar>(row - 1);//待处理的当前行const uchar* current = img.ptr<const uchar>(row);//下一行const uchar* next = img.ptr<const uchar>(row + 1);uchar *output = result.ptr<uchar>(row);int ch = img.channels();int starts = ch;int ends = (img.cols - 1) * ch;for (int col = starts; col < ends; col++){//输出图像的遍历指针与当前行的指针同步递增, 以每行的每一个像素点的每一个通道值为一个递增量, 因为要考虑到图像的通道数*output++ = saturate_cast<uchar>(5 * current[col] - current[col - ch] - current[col + ch] - previous[col] - next[col]);}} //外围像素点设为 0result.row(0).setTo(Scalar::all(0));result.row(result.rows - 1).setTo(Scalar::all(0));result.col(0).setTo(Scalar::all(0));result.col(result.cols - 1).setTo(Scalar::all(0));
}int main()
{Mat kobe = imread("F://IM_VIDEO//kobe.jpg");Mat sharpenedKobe;sharpen(kobe, sharpenedKobe);imshow("kobe", kobe);imshow("sharpened kobe", sharpenedKobe);cvWaitKey();return 0;
}

其中,关于像素操作部分可以参见:http://blog.csdn.net/piaoxuezhong/article/details/54236227

参考:

http://blog.csdn.net/mjlsuccess/article/details/12401839

http://blog.csdn.net/poem_qianmo/article/details/20537737

http://blog.csdn.net/mvtechnology/article/details/8139272

opencv函数之saturate_cast(防止溢出)相关推荐

  1. Opencv函数手册

    内容包含了Opencv的各种函数的使用中英文详细介绍.唯一的缺点是因为没有顺利,无法检索快速找出来所需要啊的函数. 有木有大神,知道怎样快速的检索Opencv函数的调用介绍?

  2. csharp通过dll调用opencv函数,图片作为参数

    [blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数          ​一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找 ...

  3. OpenCV函数 Canny 检测边缘

    OpenCV函数 Canny 检测边缘. 原理 Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法, 最优边缘 ...

  4. OpenCV函数 Laplacian 算子实现

    OpenCV函数 Laplacian 实现 Laplacian 算子 的离散模拟. 原理 前一节我们学习了 Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现"跳跃" ...

  5. OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例(附完整代码)

    OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例 OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例 OpenCV使用Sobel或Scharr O ...

  6. 【OpenCV】OpenCV函数精讲之 -- 图像容器Mat

    Mat是一个类,由两部分组成: 矩阵头(包含矩阵尺寸.存储方法.存储地址等信息) 指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针 OpenCV中,每个Mat对象有自己的 ...

  7. OpenCV函数remap详解

    OpenCV函数remap详解 remap的作用是将原影像映射到目标影像的函数. 这是OpenCV文档中的说明. 但这个描述给人的感觉是,云里雾里,到底是需要计算目标到原的映射关系,还是原到目标的映射 ...

  8. opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现

    文章目录 opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现 1. warpAffine 函数处理仿射变换 2. warp_perspective ...

  9. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  10. OpenCV函数汇总

    OpenCV函数 图像翻转函数:flip 图像翻转函数:flip void flip(InputArray src, OutputArray dst, int flipCode); flipCode ...

最新文章

  1. mysql基础小测试三_数据库---MySQL(三)
  2. 寻找不合群的数据(异常值)
  3. 面试的27个经典问题
  4. 四十四、Mysql的命令和PyMysql
  5. Jenkins执行批处理文件失败
  6. SVN入门:流程简介 安装配置 项目库配置 客户端 上线方案
  7. 基于HTML5技术的电力3D监控应用(二)
  8. 图片预览(适用于IE6,9,10,Firefox)
  9. 运维真的被云革命掉了吗?
  10. JavaScript对象创建对象的四种方式
  11. apqp过程流程图范本_过程流程图(APQP要求)
  12. 罗技K380使用手册
  13. 狸窝全能视频转换器功能介绍
  14. matlab打反斜杠,[转载]转义字符 反斜杠
  15. unity自动生成敌人_Unity3D 敌人AI 和 动画( Animator )系统的实例讲解
  16. 网络骇客入门之网络编程(一):网络应知应会
  17. 语法转换_语法 | 句型转换之陈述句变一般疑问句
  18. 管理学概念区分(行为科学、科学管理、古典管理理论)
  19. 机械硬盘与固态硬盘的区别
  20. 扎克伯格最新VR原型机来了,要让人混淆虚拟与现实的那种

热门文章

  1. MySQ随笔2(连接表、分组)
  2. Ajax json 数据格式
  3. PICT的安装及使用
  4. URAL-1998 The old Padawan 二分
  5. JS getElementsByClassName
  6. extern作用详解
  7. (译)如何使用NSCoding和NSFileManager来保存你的应用程序数据
  8. 微信小程序——事件备忘录
  9. docker安装mySQL 8
  10. 【转载】如何让外网访问IIS里面搭建的网站