#include < iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat gama(Mat& input, Mat& input1, float number)//一个简答的算法的封装
{
int height = input.rows;
int width = input.cols;
input1.create(input.size(),input.type()); //创建一个大小类型相同的图像矩阵序列,也可以用clone()函数;
for (int i = 0; i < height; i++)
for (int j = 0; j < width; j++)
{
int gray = input.at< uchar>(i, j);
input1.at< uchar>(i, j) = pow(gray, number);//将灰度值开方;
}
normalize(input1, input1, 0, 255, NORM_MINMAX);//归一化,将数据归一到0-255之间;
return input1;
}
int main()
{
const char* str_arr[] = { "0.2", "0.5", "0.8", "1", "2", "5" };
float numb[] = { 0.2,0.5,0.8,1,2,5 };
Mat src ,grayimg;
src = imread("D:\\p1\\test.jpg");
//imshow("input", src); // 显示输入的图像src;
cvtColor(src, src, COLOR_RGB2GRAY);
//imshow("output", gama(src,grayimg,1));//显示图像grayimg;
for (int i = 0; i < 6 ; i++)
{
imshow((*str_arr + i), gama(src, grayimg, numb[i]));//使用for循环进行字符数组的改变和数值的伽马值的改变
waitKey(0);
}
/*imshow("enheng", gama(src, grayimg, numb[0]));*/
destroyAllWindows();
return 0;
}
参考这位大佬的博客进行一个简单的封装实现多图像输出与数值的改变效果的对比图。