【发布时间】:2017-07-06 11:42:31
【问题描述】:
我正在使用更改对比度的图像,但我不知道如何在先修改图像后恢复图像的对比度。
我理解大于 1 的值会增加对比度,而介于 0 和 1 之间的值会降低对比度。
我尝试使用OpenCV 和ColorMatrix 中的Android。
例如,使用OpenCV,首先我将图像的对比度加倍,如下所示:
src.convertTo(dst, -1, 2, 0);
然后我把它减半:
src.convertTo(dst, -1, 0.5, 0);
但是在降低它之后,生成的图像与我在加倍对比度之前的原始图像不同。
使用Android,我使用这个颜色矩阵来加倍对比度:
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
2, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 2, 0, 0,
0, 0, 0, 1, 0});
这会减少一半:
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
0.5, 0, 0, 0, 0,
0, 0.5, 0, 0, 0,
0, 0, 0.5, 0, 0,
0, 0, 0, 1, 0});
我在互联网上尝试了不同的值和研究,但我无法弄清楚增加和减少对比度之间的等价性。
有人知道怎么做吗?
【问题讨论】:
-
如果不简单地恢复到图像备份,我会说它是不可逆的
-
我也想到了这一点,但后来我检查了 Instagram 或 Google Photos 等应用程序,它们有一个可以修改对比度的栏,看起来很流畅,让我觉得这是可能的
-
可能每次调用新设置都是从原始的新副本开始
-
convertTo使结果饱和。对于 8 位无符号值的矩阵,这意味着当您乘以 2 时,所有大于等于 128 的值都变为 255。恕我直言,当您不了解数据类型或行为时,开发功能软件的希望很小您正在使用的功能。
标签: android image opencv contrast colormatrix