opencv 彩色图镜头阴影矫正c++代码
时间: 2023-07-09 12:38:02 浏览: 122
下面是使用Opencv实现彩色图像Lens Shading Correction(镜头阴影矫正)的C++代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("input.jpg"); // 读取输入图像
if (img.empty())
{
cout << "Failed to read image!" << endl;
return -1;
}
Mat img_float;
img.convertTo(img_float, CV_32FC3, 1.0 / 255.0); // 转为浮点型
Mat gray;
cvtColor(img_float, gray, COLOR_BGR2GRAY); // 转为灰度图像
Mat kernel = getGaussianKernel(101, 20); // 生成高斯核
Mat kernel2d = kernel * kernel.t(); // 生成二维高斯核
vector<Mat> channels;
split(img_float, channels); // 分离通道
Mat shading;
resize(kernel2d, shading, img_float.size()); // 对高斯核进行插值
Mat corrected;
for (int i = 0; i < 3; i++)
{
corrected = channels[i] / shading; // 进行矫正
channels[i] = corrected;
}
merge(channels, corrected); // 合并通道
imshow("Input", img);
imshow("Corrected", corrected);
waitKey();
return 0;
}
```
在上述代码中,首先使用imread函数读取输入图像,然后将其转换为浮点型,再转换为灰度图像。接着,通过getGaussianKernel函数生成高斯核,并将其插值到与输入图像大小相同的大小。然后,分离彩色图像的通道,对每个通道进行矫正,最后将矫正后的通道合并为一个图像。
阅读全文