C++表示灰度图像的对数变换和指数变换不用OpenCV
时间: 2023-07-11 07:08:13 浏览: 110
C++代码实现灰度图像的对数变换和指数变换:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("lena.jpg", IMREAD_GRAYSCALE);
if (img.empty())
{
cout << "Failed to read image!" << endl;
return -1;
}
// 对数变换
float c = 1.0f; // 常数c
Mat log_img;
img.convertTo(log_img, CV_32F);
log_img = c * log(1.0f + log_img);
log_img.convertTo(log_img, CV_8U);
// 指数变换
float gamma = 0.5f; // 伽马值
Mat exp_img;
img.convertTo(exp_img, CV_32F);
exp_img = pow(exp_img, gamma);
exp_img.convertTo(exp_img, CV_8U);
namedWindow("Original", WINDOW_AUTOSIZE);
imshow("Original", img);
namedWindow("Log transformation", WINDOW_AUTOSIZE);
imshow("Log transformation", log_img);
namedWindow("Exponential transformation", WINDOW_AUTOSIZE);
imshow("Exponential transformation", exp_img);
waitKey(0);
return 0;
}
```
其中,对数变换的公式为:s = c * log(1 + r),指数变换的公式为:s = r^𝛾。其中,r为原始像素值,s为变换后的像素值,c和𝛾为常数。代码中使用的是OpenCV库,主要用到了Mat类和相关的转换函数。对数变换和指数变换都是先将图像转换为32位浮点型,进行变换后再转换回8位无符号整型,最后显示结果。
阅读全文