处理图像的多次转换

时间:2019-05-29 21:12:29

标签: c++ image qt opencv image-processing

我正在运行一个项目,该项目的功能与CameraRaw / Photoshop的功能大致相同。问题是,如何处理图像矩阵上的多个mod?

让我解释一下,我使用OpenCV函数阅读图像,并在QtCreator中构建了一个简单的Ui,其中包含一些用于对比度,曝光等的滑块。 所以我得到了在触发动作时调用函数contravel()的滑块;传递图片的位置以及滑块值(滑块的范围可以从-100到100)。

这是问题所在:如果将曝光度设置为+50,那么我的图像会将其增加到+50。由此,如果我尝试将其减小到+30,则曝光将是+50 +30,如我在像素图像上所写。

因此,为了从+50减少到+30,我制作了一个图像副本,将对其进行修改,然后当我调用Exposure()时,滤镜将应用于原始图像。 / p>

到目前为止很好,但是,如果我要同时应用contrast()和exposure()怎么办?就像我现在所做的那样,将两者之一调用将排除首次调用的对象。

有没有人可以帮助您找到一种解决方法?

3 个答案:

答案 0 :(得分:2)

如何将所有变换始终应用于原始图像?

您知道滑块的位置,并且知道何时发生更改。然后,您只需从头开始。拍摄新图像并一一应用转换。

为此,使函数返回应用了转换的原始图像的副本。因此,该算法将类似于:

port

,依此类推。每当发生变化时。

我认为这是合理的,因为您似乎不需要处理非常昂贵的操作。

答案 1 :(得分:0)

Paul92的答案已经回答了您的问题,并且可能是解决问题的最简单,最干净的方法。

如果您确实希望/需要保留最新的转换图像而不是原始图像,则可以将滑块位置的值存储在最新转换中,并使用增量来进行实际转换:

brightnessDelta = brightnessSlider->value() - latestBrightnessSlider;
constrastDelta = contrastSlider->value() - latestContrastSlider;

latestTransformedImage = getImage();
applyBrightness(latestTransformedImage, brightnessDelta);
applyContrast(latestTransformedImage, contrastDelta);

答案 2 :(得分:0)

嗨,我们通过创建一个函数来处理所有线性变换来解决了这个问题!