在上篇文章中,我们介绍了如何用filter2D函数来对图像进行邻域变换。这篇文章我们来简单介绍一下如何对图像的像素进行变换。
对图像的单个像素进行变换,是图像处理中一个很常见的操作。比如改变图像的亮度,对图像像素进行线性变换,二值化等。下面将以改变图像的对比度和亮度来举例。
改变图像的对比度和亮度,归根到底,就是下面的这个数学公式:
这个式子很好理解。就是将原来图像中的像素值进行比例变换,后又进行了移动。alpha一般叫做增益参数,表征对比度,而beta成为偏置参数,表征亮度变化。
对图像的每个像素进行操作,其实我们在前面的文章中已经介绍过了,比如LUT查表操作,直接用指针访问,或是用迭代器等。下面的这段代码实现了对图像对比度和亮度的这一操作,我们用指针实现:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv/cv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
Mat ChangePixel(const Mat& img,const double alpha,const int beta)
{
Mat newImg=Mat::zeros(img.size(),img.type ()); // the img to be returned