喜欢拍照的朋友肯定都接触过图像滤镜,一张图加了滤镜处理之后会有很意想不到的效果,今天说说图像滤镜的简易原理。
其实图像滤镜就是对图像的像素值有规律进行操作,下面介绍10种滤镜的原理,用于测试的原图如下图所示:
1、黑白滤镜
将彩色照片变成黑白照片,实质上是一个灰度化的过程。
彩色图像的像素值有3个通道,r, g, b。灰度化的过程就是使三通道的像素值相等,即:
b = b;
g = b;
r = b;
//灰度滤镜
void fun_gray(Mat &src, Mat &dst)
{
dst = src.clone();
for(int i=0;i<src.rows;i++)
for (int j = 0; j < src.cols; j++)
{
dst.at<Vec3b>(i, j)[0] = src.at<Vec3b>(i, j)[0];
dst.at<Vec3b>(i, j)[1] = src.at<Vec3b>(i, j)[0];
dst.at<Vec3b>(i, j)[2] = src.at<Vec3b>(i, j)[0];
}
return;
}
结果图:
2、底片滤镜
将彩色照片变成底片效果,实质是对像素值取反,即:
b = 255 - b;
g = 255 - g;
r = 255 - r;
//底片滤镜
void fun_reverse(Mat &src, Mat &dst)
{
dst = src.clone();
for (int i = 0; i<src.rows; i++)
for (int j = 0; j < src.cols; j++)
{
dst.at<Vec3b>(i, j)[0] = 255-src.at<Vec3b>(i, j)[0];
dst.at<Vec3b>(i, j)[1] = 255-src.at<Vec3b>(i, j)[1];
dst.at<Vec3b>(i, j)[2] = 255-src.at<Vec3b>(i, j)[2];
}
return;
}
效果图:
3、换色滤镜
将彩色照片换一种主色调,实质是取三通道r,g,b像素值的最大值和最小值的平均值,然后用该平均值代替某一通道的像素值,即:
value = max(r,g,b)+min(r,g,b)
b = value/2;
<