用C++&opencv写一个灰度变换函数
时间: 2024-01-22 07:17:19 浏览: 26
以下是用C++和OpenCV库实现的灰度变换函数:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void grayTransform(Mat& image, double alpha, double beta){
// 获取图像宽、高、通道数
int width = image.cols;
int height = image.rows;
int channels = image.channels();
// 判断输入图像是否为灰度图像
if(channels != 1){
cout << "输入图像不是灰度图像!" << endl;
return;
}
// 对每一个像素进行灰度变换
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
int gray = image.at<uchar>(i, j);
gray = saturate_cast<uchar>(alpha * gray + beta);
image.at<uchar>(i, j) = gray;
}
}
}
int main(){
Mat image = imread("lena.jpg", IMREAD_GRAYSCALE);
if(image.empty()){
cout << "读取图像失败!" << endl;
return -1;
}
double alpha, beta;
cout << "请输入灰度变换参数alpha和beta:" << endl;
cin >> alpha >> beta;
Mat result;
grayTransform(image, alpha, beta);
imshow("原图像", image);
imshow("灰度变换后的图像", result);
waitKey(0);
return 0;
}
```
其中,`grayTransform()`函数对输入的灰度图像进行灰度变换,参数`alpha`和`beta`是灰度变换的参数。在`main()`函数中,用户可以输入灰度变换的参数,然后调用`grayTransform()`函数实现灰度变换,并显示原图像和变换后的图像。