使用OpenCV对RGB图像进行渐晕校正

时间:2016-09-07 14:47:32

标签: c++ image visual-studio opencv

首先:我是opencv的新手:-) 我想对24位RGB图像进行渐晕校正。我使用区域扫描相机作为线性相机,并将1780x2像素的图像放在一起,以获得1780x3000像素的完整图像。由于渐晕,我制作了一张1780x2像素的白色参考图片,用于计算渐晕去除的LUT(校正因子)。这是我的代码想法:

    Mat white = imread("WHITE_REF_2L.bmp", 0);
    Mat lut(2, 1780, CV_8UC3, Scalar(0));
    lut = 255 / white;
    imwrite("lut_test.bmp", lut*white);

据我了解,第二条最后一行将(希望)做的是将每个通道的每个强度值除以255并将其存储在lut matrice中。 我想用那个来计算“真实”(不是扭曲的)强度 通过将src img的每个元素与lut matrice的每个元素相乘,每个像素的级别。

显然我的工作方式不合适,我得到了内存异常。

有人可以帮我解决这个问题吗?

编辑:我正在使用opencv 3.1.0,我解决了这样的问题:

    // read white reference image
    Mat white = imread("WHITE_REF_2L_D.bmp", IMREAD_COLOR);
    white.convertTo(white, CV_32FC3);
    // calculate LUT with vignetting correction factors
    Mat vLUT(2, 1780, CV_32FC3, Scalar(0.0f));
    divide(240.0f, white, vLUT);

当然这不是最优的,我会阅读更多白色参考文献并计算要优化的平均值。

Here's the 2 lines white reference, you can see the shadows at the image borders i want to correct

当我将vLUT与白色参考相乘时,显然会得到一个同质的image

谢谢,也许这可以帮助其他人;)

0 个答案:

没有答案