我正在玩改变其对比度的图像,但是我不知道如何在先修改图像后恢复图像的对比度。
我了解到,值大于1会增加对比度,而值介于0到1之间会降低对比度。
我尝试了OpenCV
和ColorMatrix
中的Android
。
例如,使用OpenCV
,首先我将图像的对比度加倍,如下所示:src.convertTo(dst, -1, 2, 0);
然后将其减少一半:src.convertTo(dst, -1, 0.5, 0);
但是在将其减小后,所得图像与将对比度加倍之前的原始图像不同。
使用Android
,我正在使用此colorMatrix使对比度加倍:
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});
我尝试了不同的值(value)并在Internet上进行了研究,但我无法弄清楚对比度增加和减少之间的等效性。
有人知道怎么做这个吗?
最佳答案
嗨,您可以使用以下方法更改对比度
/**
* Set contrast and brightness in bitmap
*
* @param bmp bitmap to change
* @param contrast contrast value from 1 to 10
* @param brightness brightness value from 1 to 100
* @return tuned bitmap
*/
public static Bitmap ChangeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness) {
ColorMatrix cm = new ColorMatrix(new float[]
{
contrast, 0, 0, 0, brightness,
0, contrast, 0, 0, brightness,
0, 0, contrast, 0, brightness,
0, 0, 0, 1, 0
});
Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
Canvas canvas = new Canvas(ret);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(bmp, 0, 0, paint);
return ret;
}