曝光过度滤镜可以模拟出传统摄影术中,在暗房显影过程中短暂增加光线强度而产生的过度曝光效果。
原理: 像素值取原图像和反色图像中较小的值。
代码:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
int main()
{
cv::Mat img = cv::imread("D:\\timg.jpg");
cv::Mat Result(img.rows, img.cols, CV_8UC3, cv::Scalar(0, 0, 0));
int i, j;
for (i = 0; i < img.rows; i++)
{
for (j = 0; j < img.cols; j++)
{
Result.at<cv::Vec3b>(i, j)[0] = cv::min(img.at<cv::Vec3b>(i, j)[0], (uchar)(255 - img.at<cv::Vec3b>(i, j)[0]));
Result.at<cv::Vec3b>(i, j)[1] = cv::min(img.at<cv::Vec3b>(i, j)[1], (uchar)(255 - img.at<cv::Vec3b>(i, j)[1]));
Result.at<cv::Vec3b>(i, j)[2] = cv::min(img.at<cv::Vec3b>(i, j)[2], (uchar)(255 - img.at<cv::Vec3b>(i, j)[2]));
}
}
cv::imshow("result", Result);
cv::waitKey(20000);
return 0;
}
效果:
原图
效果图