调整饱和度的方法,代码如下:

void AdjustSatuation(cv::Mat &image, float adjust) {int width = image.cols, height = image.rows;for (int i = 0; i < height; ++i) {auto data = image.ptr<cv::Vec3b>(i);for (int j = 0; j < width; ++j) {float lum = data[j][0] * 0.299f + data[j][1] * 0.587f + data[j][2] * 0.114f;float maskB = std::max(0.0f, std::min(data[j][0] - lum, 255.0f)) / 255.0f;float maskG = std::max(0.0f, std::min(data[j][1] - lum, 255.0f)) / 255.0f;float maskR = std::max(0.0f, std::min(data[j][2] - lum, 255.0f)) / 255.0f;float lumMask = (1.0f - (maskB * 0.299f + maskG * 0.587f + maskR * 0.114f)) * adjust;data[j][0] = cv::saturate_cast<uchar>(data[j][0] * (1.0f + lumMask) - lum * lumMask);data[j][1] = cv::saturate_cast<uchar>(data[j][1] * (1.0f + lumMask) - lum * lumMask);data[j][2] = cv::saturate_cast<uchar>(data[j][2] * (1.0f + lumMask) - lum * lumMask);}}
}

调整前后对比:

原图

增加50%饱和度

减少50%饱和度

其中adjust取值范围为[-1,1]

另一种饱和度调整算法:

void AdjustSatuation(const cv::Mat &src, cv::Mat &dst, int percent) {dst.create(src.size(), src.type());int width = src.cols, height = src.rows;int channels = src.channels();if (channels != 3 || src.type() != CV_8UC3) {return;}float ratio1 = 1 / 255.0f;float adjust = std::max(std::min(percent, 100), -100) / 100.0f;for (int i = 0; i < height; ++i) {auto srcData = src.ptr<uchar>(i);auto dstData = dst.ptr<uchar>(i);for (int j = 0; j < width; ++j) {int j3 = j * 3;int r = srcData[j3 + 2];int g = srcData[j3 + 1];int b = srcData[j3];int maxV = std::max(r, std::max(g, b));int minV = std::min(r, std::min(g, b));float delta = (maxV - minV) * ratio1;if (delta < 1e-3f) {dstData[j3] = b;dstData[j3 + 1] = g;dstData[j3 + 2] = r;continue;}float value = (maxV + minV) * ratio1;float L = value / 2.0f;float S = delta / value;if (L >= 0.5f) {S = delta / (2.0f - value);}if (percent >= 0) {float alpha = 1.0f - adjust;if (adjust + S >= 1) {alpha = S;}alpha = 1.0f / alpha - 1.0f;dstData[j3] = cv::saturate_cast<uchar>(b + (b - L * 255.0f) * alpha);dstData[j3 + 1] = cv::saturate_cast<uchar>(g + (g - L * 255.0f) * alpha);dstData[j3 + 2] = cv::saturate_cast<uchar>(r + (r - L * 255.0f) * alpha);}else {float alpha = 1.0f + adjust;dstData[j3] = cv::saturate_cast<uchar>(L * 255.0f + (b - L * 255.0f) * alpha);dstData[j3 + 1] = cv::saturate_cast<uchar>(L * 255.0f + (g - L * 255.0f) * alpha);dstData[j3 + 2] = cv::saturate_cast<uchar>(L * 255.0f + (r - L * 255.0f) * alpha);}}}
}

调整后的图像结果为:

增加50%的饱和度

减少50%的饱和度

图像处理相关算法之饱和度调整相关推荐

  1. 图像处理算法python_图像处理——饱和度调整算法(python语言)

    饱和度调整算法说明(完整python代码在文末): 本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整.调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R.G ...

  2. 图像处理——饱和度调整算法(python语言)

    饱和度调整算法说明(完整python代码在文末): 本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整.调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R.G ...

  3. Photoshop图像处理算法—饱和度调整

    前言:之前在公司做项目的用到photoshop颜色空间的一些相关方法,在此总结一下.下面原理部分是从我的总结文档里截取来的.需要复制的童鞋自己手写一下~ 2.程序部分 1)Matlab实验程序. &l ...

  4. 无人机图像处理工具-亮度、对比度、饱和度调整/匀光匀色/图像去雾

    无人机图像处理工具,java写的,已打包为64位可执行文件exe,并且绑定lib文件(jre),无需在电脑上单独安装java运行环境.支持亮度.对比度.饱和度调整,匀光匀色(自动色阶.自动对比度),图 ...

  5. PS 图像调整算法——饱和度调整

    算法参考自 阿发伯 的博客. http://blog.csdn.net/maozefa 饱和度调整 图像的饱和度调整有很多方法,最简单的就是判断每个象素的R.G.B值是否大于或小于128,大于加上调整 ...

  6. 你真的理解图像处理经典算法 SIFT 吗?最深入、最全面综述:尺度不变特征转换

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨LYP2020@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/ ...

  7. 用OpenCV实现Photoshop算法(四): 色阶调整

    系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...

  8. 图像饱和度调整 参考

    图像的饱和度调整有很多方法,最简单的就是判断每个象素的R.G.B值是否大于或小于128,大于加上调整值,小于则减去调整值:也可将象素RGB转换为HSV或者HSL,然后调整其S部分,从而达到线性调整图象 ...

  9. PACS/RIS医学影像管理系统源码 提供先进图像处理和算法

    PACS(医学影像存档与通信系统)主要应用于医学影像的存储.传输和显示.它可以使医生突破胶片的局限,对病人的影像进行全方位的处理和观察,以便得出更准确的诊断.同时,PACS可以节省大量的胶片,降低成本 ...

最新文章

  1. 网站收录工具(php导航自动收录源码)_网站如何快速收录,网站不收录怎么办?...
  2. 每日一技|巧用 Telnet 调试 Dubbo 服务
  3. 线结构光平面标定矩阵变换算子
  4. Eclipse java项目转换为web项目
  5. python数据结构与算法(2)
  6. 【Vegas原创】远程桌面下重启xp系统的命令
  7. 有的字体,设置了粗体,也不能用粗体方式来绘制
  8. 现有Android项目中集成Flutter/Flutter混合开发实战(一)
  9. 深度学习框架PyTorch:入门与实践 学习(三)
  10. 王峻 非西南大学计算机与信息科学学院教授,余国先 - 计算机与信息科学学院 - Powered by 西南大学...
  11. UK EU 码对照表,USA EURO SIZE码对照表,国外衣服码对照表
  12. 【Python实战】有趣的代码百里挑一:这款“水波特效”脚本送给你,绝版哦~(建议保留)
  13. 【温州死中】温州RAP
  14. 树莓派 3B+/4B 连接“手机热点“或“WiFi“ 后无法上网(必解)
  15. python 压缩算法_lzma — 用 LZMA 算法压缩
  16. java 流计算_Java 流收集器 ( Stream Collectors ) ( 一 ) - 统计计算
  17. 数据处理常用方法(python)
  18. 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN
  19. audio音频播放标签样式优化自定义
  20. Direct3D 11在windows7上提示创建d3d设备失败

热门文章

  1. 怎么修改win8计算机用户名和密码忘了怎么办,win8忘记了登陆密码怎么办|win8用户登入密码忘了的解决措施...
  2. 51单片机用c语言倒计时程序,51单片机实现100以内倒计时,求大佬指点。
  3. 欧几里得数据与非欧几里得数据
  4. 第5 部分 EIGRP
  5. tring转换成Integer numberformatexception 分析
  6. 【Scratch-文字朗读模块】Scratch-文字朗读模块分析——人工智能的基础
  7. 浅谈![CDATA[ ]]
  8. HDU - 1431 素数回文 【素数打表】+【判断回文】
  9. Python Flask开发简单http api接口 示例
  10. Oracle数据库中的级联查询、级联删除、级联更新操作教程