作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

实现原理

之前筹备了几款图像处理的工具函数,就是为了实现一些定义好的滤镜特效。这几个函数分别为饱和度(Saturation)、明度(Lightness)、对比度(Contrast)、锐化(Sharpen)、阴影(Shadow)、高光(HighLight)、色温(ColorTemperature)。

今天展示的是巧克力滤镜,大家可以根据自身喜好,适当合理地调整滤镜参数。美食-巧克力滤镜参数为:

  1. 饱和度+20;
  2. 明度-15;
  3. 对比度+35;
  4. 锐化+10,type为0;
  5. 阴影+25;
  6. 高光-5;

之所以这么设计,是考虑到巧克力的颜色普遍为深棕色,通过提高饱和度使棕色更鲜明;明度降低可以使图像整体偏暗,若太亮会使巧克力发白;对比度增强,是为了突出巧克力和桌面等背景色的差异;锐化增加,可使得巧克力纹路细节更丰富;阴影增加是为了使得巧克力深色区域提亮,不然整个图像暗蒙蒙的很压抑;高光减少是为了背景光的干扰。

工具函数链接如下。

功能函数链接

1.饱和度:OpenCV-图像饱和度_翟天保的博客-CSDN博客

2.明度:OpenCV-图像明度_翟天保的博客-CSDN博客

3.对比度:OpenCV-图像对比度_翟天保的博客-CSDN博客

4.锐化:OpenCV-图像锐化_翟天保的博客-CSDN博客

5.阴影:OpenCV-图像阴影调整_翟天保的博客-CSDN博客

6.高光:OpenCV-图像高光调整_翟天保的博客-CSDN博客

C++测试代码

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;#define max2(a,b) (a>b?a:b)
#define max3(a,b,c) (a>b?max2(a,c):max2(b,c))
#define min2(a,b) (a<b?a:b)
#define min3(a,b,c) (a<b?min2(a,c):min2(b,c))// 饱和度
cv::Mat Saturation(cv::Mat src, int percent);
// 明度
cv::Mat Lightness(cv::Mat src, float percent);
// 对比度
cv::Mat Contrast(cv::Mat src, int percent);
// 图像锐化
cv::Mat Sharpen(cv::Mat input, int percent, int type);
// 图像阴影选取
cv::Mat Shadow(cv::Mat input, int light);
// 图像高光选取
cv::Mat HighLight(cv::Mat input, int light);
// 色温调节
cv::Mat ColorTemperature(cv::Mat input, int percent);int main()
{cv::Mat src = imread("chocolate.jpg");cv::Mat sat = Saturation(src, 20);cv::Mat lig = Lightness(sat, -15);cv::Mat con = Contrast(lig, 35);cv::Mat sha = Sharpen(con, 10, 0);cv::Mat sdo = Shadow(sha, 25);cv::Mat hig = HighLight(sdo, -5);imshow("original", src);imshow("Saturation", sat);imshow("Lightness", lig);imshow("Contrast", con);imshow("Sharpen", sha);imshow("Shadow", sdo);imshow("HighLight", hig);waitKey(0);return 0;
}

测试效果

图1 原图

图2 效果图

如果大家有更好的参数配置,欢迎评论区分享,看看谁的滤镜更适合巧克力。

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-美食—巧克力滤镜相关推荐

  1. OpenCV通过维纳滤镜恢复散焦图像的实例(附完整代码)

    OpenCV通过维纳滤镜恢复散焦图像的实例 OpenCV通过维纳滤镜恢复散焦图像的实例 OpenCV通过维纳滤镜恢复散焦图像的实例 #include <iostream> #include ...

  2. OpenCV离焦去模糊滤镜

    OpenCV离焦去模糊滤镜 离焦去模糊滤镜 目标 理论 什么是降级图像模型? 如何恢复模糊的图像? 什么是维纳过滤器? 源代码 解释 结果 离焦去模糊滤镜 目标 在本教程中,您将学习: 什么是退化图像 ...

  3. OpenCV实现马赛克滤镜

    OpenCV实现马赛克滤镜 实现用按下鼠标左键拖动时,在鼠标经过的路径上打上马赛克. 马赛克的原理是将图像中选中区域的像素用这个选中区域中的某一像素覆盖. 为了不让鼠标重复经过图像中同一个的时候,选取 ...

  4. 学习opencv:PS滤镜—曝光过度

    曝光过度滤镜可以模拟出传统摄影术中,在暗房显影过程中短暂增加光线强度而产生的过度曝光效果. 原理: 像素值取原图像和反色图像中较小的值. 代码: #include <iostream> # ...

  5. 学习opencv:PS滤镜—等高线

    摸索了两天,终于把等高线效果做出来了,摸索的过程也有记录的意义.下面开始. 等高线滤镜有色阶.较低.较高三个控制项,根据PS书籍记载,选择"较低"选项时将在基准亮度以下的轮廓上产生 ...

  6. 学习opencv:PS滤镜—扩散

    原理: 扩散滤镜的效果是局部混乱而整体有序,可在邻域中随机取值实现,这样在邻域中便是混乱的,而邻域间仍保持有序,从而保证了整体的有序. 代码: #include <iostream> #i ...

  7. Opencv之色调均化滤镜

    1.介绍 色调均化功能通常是在进行修片处理前期比较常用的功能之一,如果让我们自己实现色调均化功能,我觉得大部分人会用直方图均衡化试一试,刚好,此方法就是借用直方图均衡化,由于彩色图片一般是RGB三通道 ...

  8. 学习opencv:PS滤镜—马赛克

    原理:马赛克可以理解为降低原图像的分辨率,用一组大像素覆盖原图区域,大像素的值用覆盖区域小像素的均值替代. 代码: #include<iostream> #include <open ...

  9. 学习opencv:PS滤镜—浮雕

    实现浮雕效果的算子有很多,效果大同小异,不同算子的处理结果在细节上会有所差异.事实上,任何一阶差分算子都可用于实现浮雕效果,简单起见,这里使用算子[-1,1]. 代码如下 #include<io ...

最新文章

  1. mybatis 取list第一个_MyBatis基础搭建及架构概述
  2. Dijkstra算法.
  3. c++数据结构中 顺序队列的队首队尾_数据结构 3.3 顺序队
  4. Linux用户和组相关的配置文件
  5. vmware下/mnt/hgfs下为空的问题
  6. php非,PHP实现非对称加密
  7. boost::errinfo_errno的用法测试程序
  8. java中catalina.out_如何控制Tomcat的catalina.out的大小
  9. Java Application和Java Applet
  10. 第十四篇 元类编程(二)
  11. oracle怎么查找数据泵,ORACLE数据泵使用详解
  12. 【工作笔记001】SuperMap配准TransCAD底图
  13. 基于OpenCV的条形码区域检测(一)
  14. (ROC-RK3568-PC) 裸机24_驱动VOP2显示自绘画面
  15. stm32mp157开发板常用系统工具使用
  16. Nat. Mach. Intell. | 快速的蛋白质结构从头预测
  17. 2012年最新的显卡天梯图,真正的购机指南!
  18. WorkNC配置与MAKINO牧野 MCC2013 6轴加工中心
  19. Dozer 时间转换问题
  20. 米家扫地机器人充满电需要多长时间_米家扫地机器人可以续航多久

热门文章

  1. PYTHON1.day06
  2. 直接在安装了redis的Linux机器上操作redis数据存储类型--List类型
  3. web.xml文件书写规则
  4. 配置豪华的 Windows 开发环境
  5. 剑指 Offer II 109. 开密码锁
  6. 8-14 领导者选举
  7. 33muduo_net库源码分析(九)
  8. kali系统支持那些手机_将kali安装到手机上作为便携式系统启动盘的方法
  9. mysql.8.0.13ZIP安装教程_关于mysql 8.0.13zip包安装方法
  10. java某个参数值设置为空_@PathVariable为空时指定默认值的操作