opencv 彩色图片白平衡 c++代码
时间: 2023-07-24 10:34:25 浏览: 115
下面是使用 OpenCV 库实现彩色图像白平衡的 C++ 代码示例:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
void whiteBalance(Mat& src, Mat& dst) {
// 计算每个通道的平均值
Scalar avgPixel = mean(src);
float avgB = avgPixel[0];
float avgG = avgPixel[1];
float avgR = avgPixel[2];
// 计算像素增益
float kr = (avgB + avgG + avgR) / (3 * avgR);
float kg = (avgB + avgG + avgR) / (3 * avgG);
float kb = (avgB + avgG + avgR) / (3 * avgB);
// 应用增益调整
Mat channels[3];
split(src, channels);
channels[0] = channels[0] * kb;
channels[1] = channels[1] * kg;
channels[2] = channels[2] * kr;
merge(channels, 3, dst);
}
int main() {
Mat src = imread("input.jpg");
if (src.empty()) {
return -1;
}
Mat dst;
whiteBalance(src, dst);
imshow("input", src);
imshow("output", dst);
waitKey(0);
return 0;
}
```
该代码使用 `whiteBalance` 函数对输入图像进行白平衡处理,其中:
1. 使用 `mean` 函数计算每个通道的平均值。
2. 根据平均值计算像素增益。
3. 将增益应用到每个通道上,得到平衡后的图像。
在 `main` 函数中,读取输入图像并调用 `whiteBalance` 函数进行处理,然后展示原始图像和平衡后的图像。
阅读全文