图像处理
点算子:对每个像素的操作不依赖它的邻域像素。
邻域算子:对每个像素的输出值依赖于其邻域像素。
像素变换
在这一类图像处理变换中,仅仅根据输入像素值(有时可加上某些全局信息或参数),计算相应输出像素值。
这类算子包括,亮度和对比度调整,以及颜色校正和变换。
亮度和对比度调整
两种常用的点算子,是用常数对点进行乘法和加法运算。
g( x )=a*f( x )+ b
两个参数a>0,和b 一般称为增益和偏置参数,分别用来控制对比度和亮度。
将f(x)看做源图像像素,将g(x)看做输出图像像素。
g( i, j )=a*f( i, j )+ b
saturate_cast(防止溢出)
对像素进行加减乘除运算之后,结果为负,转化为0;结果大于255转化为255。
#include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; int main() { double alpha; int beta; Mat image = imread("D:\OpenCVT\2.jpg"); Mat new_image = Mat::zeros(image.size(), image.type()); //初始化 cin >> alpha; cin >> beta; //执行运算 new_image=alpha*image+beta for (int y = 0; y < image.rows; y++) { for (int x = 0; x < image.cols; x++) { for (int c = 0; c < 3; c++) { new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(image.at<Vec3b>(y, x)[c]) + beta); } } } //创建窗口 namedWindow("Original Image", 1); namedWindow("New Image", 1); //显示图像 imshow("Original Image", image); imshow("New Image", new_image); waitKey(); return 0; }
代码中for循环可直接用函数
image.convertTo(new_image, -1, alpha, beta);