用C++写一个opencv的伽马变换
时间: 2023-06-11 11:08:46 浏览: 131
C++与opencv实现常用图像处理与仿射变换
下面是一个简单的示例代码,用于对一张图像进行伽马变换:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
if(argc != 2)
{
cout << "Usage: " << argv[0] << " <image_path>" << endl;
return -1;
}
Mat img = imread(argv[1], IMREAD_GRAYSCALE);
if(img.empty())
{
cout << "Failed to read image: " << argv[1] << endl;
return -1;
}
float gamma = 1.5;
Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.ptr();
for(int i = 0; i < 256; i++)
{
p[i] = saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
Mat output;
LUT(img, lookUpTable, output);
imshow("Input", img);
imshow("Output", output);
waitKey(0);
return 0;
}
```
该程序的主要思路是创建一个查找表,用于将原始图像的像素值映射到新的伽马变换后的像素值。然后使用OpenCV的LUT函数将原始图像与查找表进行映射,得到变换后的图像。
阅读全文