我正在玩改变图像对比度的游戏,但我不知道如何在第一次修改图像后恢复图像的对比度。
我的理解是,当数值大于1时,我会增加对比度,而当数值在0到1之间时,我会降低对比度。
我尝试使用OpenCV和Android中的ColorMatrix。
例如,使用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});我在互联网上尝试了不同的价值观和研究,但我找不出增加和减少对比度之间的等价物。
有人知道怎么做吗?
发布于 2017-07-06 19:50:42
您好,您可以使用以下方法更改对比度
/**
* 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;
}https://stackoverflow.com/questions/44947904
复制相似问题