实现原理
之前筹备了几款图像处理的工具函数,就是为了实现一些定义好的滤镜特效。这几个函数分别为饱和度(Saturation)、明度(Lightness)、对比度(Contrast)、锐化(Sharpen)、阴影(Shadow)、高光(HighLight)、色温(ColorTemperature)。
今天展示的是巧克力滤镜,大家可以根据自身喜好,适当合理地调整滤镜参数。美食-巧克力滤镜参数为:
- 饱和度+20;
- 明度-15;
- 对比度+35;
- 锐化+10,type为0;
- 阴影+25;
- 高光-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 效果图
如果大家有更好的参数配置,欢迎评论区分享,看看谁的滤镜更适合巧克力。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!