c语言实现幂率变换和直方图均衡下的灰度变换
时间: 2023-11-21 13:05:40 浏览: 31
好的,关于c语言实现幂率变换和直方图均衡下的灰度变换,您可以参考下列代码:
1. 幂率变换的灰度变换:
```
void powerlaw_transform(Mat& image, Mat& result)
{
double gamma = 0.4; // 设置幂值
double C = 1; // 设置常数
double temp_value = 0;
result.create(image.size(), image.type());
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
temp_value = pow((image.at<uchar>(i, j) / 255.0), gamma) * 255 * C;
if (temp_value > 255)
temp_value = 255;
result.at<uchar>(i, j) = (uchar)temp_value;
}
}
return;
}
```
2. 直方图均衡的灰度变换:
```
void histogram_equalization(Mat& image, Mat& result)
{
int hist_size = 256;
float range[] = {0, 256};
const float* hist_range = {range};
Mat gray_image;
cvtColor(image, gray_image, COLOR_BGR2GRAY);
result.create(image.size(), image.type());
Mat hist;
calcHist(&gray_image, 1, 0, Mat(), hist, 1, &hist_size, &hist_range);
for (int i = 1; i < hist_size; i++)
{
hist.at<float>(i) += hist.at<float>(i - 1);
}
for (int i = 0; i < gray_image.rows; i++)
{
for (int j = 0; j < gray_image.cols; j++)
{
result.at<uchar>(i, j) = 255 * (hist.at<float>(gray_image.at<uchar>(i, j)) / (gray_image.rows * gray_image.cols));
}
}
return;
}
```
希望能够对您有所帮助。