我正在运行一个项目,该项目的功能与CameraRaw / Photoshop的功能大致相同。问题是,如何处理图像矩阵上的多个mod?
让我解释一下,我使用OpenCV函数阅读图像,并在QtCreator中构建了一个简单的Ui,其中包含一些用于对比度,曝光等的滑块。 所以我得到了在触发动作时调用函数contravel()的滑块;传递图片的位置以及滑块值(滑块的范围可以从-100到100)。
这是问题所在:如果将曝光度设置为+50,那么我的图像会将其增加到+50。由此,如果我尝试将其减小到+30,则曝光将是+50 +30,如我在像素图像上所写。
因此,为了从+50减少到+30,我制作了一个图像副本,将对其进行修改,然后当我调用Exposure()时,滤镜将应用于原始图像。 / p>
到目前为止很好,但是,如果我要同时应用contrast()和exposure()怎么办?就像我现在所做的那样,将两者之一调用将排除首次调用的对象。
有没有人可以帮助您找到一种解决方法?
答案 0 :(得分:2)
如何将所有变换始终应用于原始图像?
您知道滑块的位置,并且知道何时发生更改。然后,您只需从头开始。拍摄新图像并一一应用转换。
为此,使函数返回应用了转换的原始图像的副本。因此,该算法将类似于:
port
,依此类推。每当发生变化时。
我认为这是合理的,因为您似乎不需要处理非常昂贵的操作。
答案 1 :(得分:0)
Paul92的答案已经回答了您的问题,并且可能是解决问题的最简单,最干净的方法。
如果您确实希望/需要保留最新的转换图像而不是原始图像,则可以将滑块位置的值存储在最新转换中,并使用增量来进行实际转换:
brightnessDelta = brightnessSlider->value() - latestBrightnessSlider;
constrastDelta = contrastSlider->value() - latestContrastSlider;
latestTransformedImage = getImage();
applyBrightness(latestTransformedImage, brightnessDelta);
applyContrast(latestTransformedImage, contrastDelta);
答案 2 :(得分:0)
嗨,我们通过创建一个函数来处理所有线性变换来解决了这个问题!