我正在玩改变其对比度的图像,但是我不知道如何在先修改图像后恢复图像的对比度。

我了解到,值大于1会增加对比度,而值介于0到1之间会降低对比度。

我尝试了OpenCVColorMatrix中的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;
    }

10-07 22:25