gpt4 book ai didi

c++ - 径向过度曝光修复 Gradiant OpenCV

转载 作者:行者123 更新时间:2023-11-28 04:51:14 36 4
gpt4 key购买 nike

我有一架照相机和一盏灯。相机自动拍照,灯管刚性。

我的每张图片中间都有一个亮点,外面越来越暗(线性)。

是否有一种简单的方法可以使中间变暗或使外部变亮以适应这种情况(最好使用渐变)?

我正在使用带有 C++ API 的 OpenCV。

谢谢你的帮助。

最佳答案

如果没有示例,很难说出您到底想做什么。但是,我们假设所有图像的效果完全相同,并且您希望对每个图像应用相同的变换。

你说效果是线性的,假设你想让中心变暗 20%,离中心最远的像素亮 20%。让我们进一步假设光学中心位于图像的中心(在实践中不一定如此)。

所以你有一个图像 cv::Mat img; 你想操作,我假设它包含 CV_32F 类型的数据(如果不是 float 或双值,转换,可以超过一个 channel )。你创建另一个 cv::Mat

//first, make a mask image to multiply the image with
cv::Mat mask = cv::Mat::zeros(img.rows,img.cols,CV_32F);

float maxdist = std::sqrt(img.rows*img.rows+img.cols*img.cols)/2;

cv::Point2f center(img.cols*0.5,img.rows*0.5);

for (int j=0;j<img.rows;++j)
for (int i=0;i<img.cols;++i)
{
cv::Point2f p(i,j);
cv::Point2f diff(p-center);
float dist(std::sqrt(diff.dot(diff)));
float factor(0.8+0.4*dist/maxdist);
mask.at<float>(j,i) = factor;
}

//apply the transformation, to as many images as you like
img = img.mul(mask);

这不会检查溢出,之后您可能想也可能不想这样做。但从你的问题来看,这将是一种简单的方法。

关于c++ - 径向过度曝光修复 Gradiant OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174237/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com