图像处理
点算子:对每个像素的操作不依赖它的邻域像素。
邻域算子:对每个像素的输出值依赖于其邻域像素。
像素变换
在这一类图像处理变换中,仅仅根据输入像素值(有时可加上某些全局信息或参数),计算相应输出像素值。
这类算子包括,亮度和对比度调整,以及颜色校正和变换。
亮度和对比度调整
两种常用的点算子,是用常数对点进行乘法和加法运算。
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);
浙公网安备 33010602011771号