2017-07-06 95 views
0

我正在玩改變其對比度的圖像,但我不知道如何在首先修改圖像後恢復圖像的對比度。在Android或OpenCV中修改圖像後恢復圖像的對比度

我明白一個大於1的值我增加了對比度,並且值介於0和1之間我減少了它。

我試過OpenCVColorMatrixAndroid

例如,使用OpenCV,第一I雙重圖像的這樣的對比度:

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}); 

我有着不同的價值觀嘗試和研究在互聯網上,但我無法弄清楚增加和減少對比之間的等價關係。

有沒有人知道如何做到這一點?

+0

我會說其不可逆的,而不只是恢復到一個映像備份 –

+0

是來到我的腦海太多,但後來我檢查喜歡的Instagram或谷歌的照片有應用一個修改對比度的圖標,看起來非常平滑,讓我覺得這是可能的 – mlg

+1

可能每次調用一個新的設置都是從​​原始的 –

回答

0

你好你可以用以下方法改變對比度

/** 
    * 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; 
    } 
+0

由於圖像本身正在被修改,你不能得到確切的原始圖像 –