OpenCV-风景—天空滤镜
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-风景—天空滤镜相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
实现原理
之前筹备了几款图像处理的工具函数,就是为了实现一些定义好的滤镜特效。这几个函数分别为饱和度(Saturation)、明度(Lightness)、对比度(Contrast)、锐化(Sharpen)、阴影(Shadow)、高光(HighLight)、色温(ColorTemperature)。
本文展示的是天空滤镜,大家可以根据自身喜好,适当合理地调整滤镜参数。风景-天空滤镜参数为:
- 饱和度+35;
- 明度+20;
- 对比度+15;
- 阴影+15;
- 高光-30;
- 色温-40;
通过提高饱和度使风景色彩更鲜艳;明度增加有助于图像整体提亮;对比度适当增强,是为了突出天空和其他区域的差异;阴影增加是为了使云彩阴影处提亮,“晴天”感重些;高光减少是为了避免曝光过度使得天空一片亮白;色温降低是为了突出天空蓝色。
工具函数链接如下。
功能函数链接
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("sky1.jpg");
cv::Mat sat = Saturation(src, 35);
cv::Mat lig = Lightness(sat, 20);
cv::Mat con = Contrast(lig, 15);
cv::Mat sdo = Shadow(con, 15);
cv::Mat hig = HighLight(sdo, -30);
cv::Mat col = ColorTemperature(hig,-40);
imshow("original", src);
imshow("Saturation", sat);
imshow("Lightness", lig);
imshow("Contrast", con);
imshow("Shadow", sdo);
imshow("HighLight", hig);
imshow("ColorTemperature", col);
waitKey(0);
return 0;
}
测试效果
如果大家有更好的参数配置,欢迎评论区分享,看看谁的滤镜更凸显天空美。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
以上是关于OpenCV-风景—天空滤镜的主要内容,如果未能解决你的问题,请参考以下文章
android 采集摄像头预览帧,使用opencv和MediaCodec直接录制水印滤镜视频