用C++写一个opencv的伽马变换并写上注释
时间: 2023-06-11 19:08:35 浏览: 206
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读入一张灰度图像
Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
if (img.empty())
{
cout << "Could not read the image!" << endl;
return -1;
}
// 显示原图
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", img);
// 设置伽马值
double gamma = 0.5;
// 对图像进行伽马变换
Mat gammaImg;
double inverse_gamma = 1.0 / gamma;
LUT(img, Mat(Size(256, 1), CV_8UC1, Scalar::all(0)), gammaImg);
for (int i = 0; i < 256; i++)
{
gammaImg.at<uchar>(i) = pow((double)i / 255, inverse_gamma) * 255;
}
// 显示变换后的图像
namedWindow("Gamma Image", WINDOW_NORMAL);
imshow("Gamma Image", gammaImg);
waitKey(0);
return 0;
}
```
注释:
1. 读入一张灰度图像:
```c
// 读入一张灰度图像
Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
```
2. 显示原图:
```c
// 显示原图
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", img);
```
3. 设置伽马值:
```c
// 设置伽马值
double gamma = 0.5;
```
4. 对图像进行伽马变换:
```c
// 对图像进行伽马变换
Mat gammaImg;
double inverse_gamma = 1.0 / gamma;
LUT(img, Mat(Size(256, 1), CV_8UC1, Scalar::all(0)), gammaImg);
for (int i = 0; i < 256; i++)
{
gammaImg.at<uchar>(i) = pow((double)i / 255, inverse_gamma) * 255;
}
```
5. 显示变换后的图像:
```c
// 显示变换后的图像
namedWindow("Gamma Image", WINDOW_NORMAL);
imshow("Gamma Image", gammaImg);
```
阅读全文