RGB通过转换成HSV增加明度和饱和度

2023-10-27 17:20

本文主要是介绍RGB通过转换成HSV增加明度和饱和度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RGB图像对亮度和饱和度的表示不是很直观。而HSV空间图像却可以很直观的表现出每个像素的亮度和饱和度

所以先将RGB图像转换为HSV图像,然后调整亮度和饱和度,最后将HSV图像转换为RGB图像。

参考公式:http://en.wikipedia.org/wiki/HSL_color_space


activity的代码:

public void remove(View v){
        Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.cc);
           int width = bitmap.getWidth();  
        int height = bitmap.getHeight();
        int[] inpixel=new int[width*height];
        int[] outpixel=new int[width*height];
        bitmap.getPixels(inpixel, 0, width, 0, 0, width, height);
        for(int y=0;y<height;y++){
           for(int x=0;x<width;x++){
               int a=inpixel[y*width+x]>>24&0xff;
               int r=inpixel[y*width+x]>>16&0xff;
               int g=inpixel[y*width+x]>>8&0xff;
               int b=inpixel[y*width+x]&0xff;
               
               //from RGB to HSL
               float H=0,S=0,V=0;
               float cMax=255.0f;
               float high=Math.max(r, Math.max(g,b));
               float low=Math.min(r, Math.min(g,b));
               float rng=high-low;
               //计算明度v
               V=high/cMax ;
               //计算饱和度S
               if(high>0){
                  S=(float)rng/high;
               }
               //计算色调H
               
               if(rng>0){
                   float rr=(float)(high-r)/rng;
                   float gg=(float)(high-g)/rng;
                   float bb=(float)(high-b)/rng;
                   float hh=0;
                   if(r==high){
                       hh=bb-gg;
                   }else if(g==high){
                       hh=rr-bb+2;
                   }else if(b==high){
                       hh=gg-rr+4;
                   }
                   
                   if(hh<0){
                       H=(hh+6)/6;
                   }else{
                       H=hh/6;
                   }
               }
              
               //application HSL
                H=H;
                S=S+0.01f;
                V=V+0.2f;
                if(H>1){
                    H=1;
                }
                if(S>1){
                    S=1;
                }
                if(V>1){
                    V=1;
                }
               //form HSL to RGB
               int pix=HSVtoRGB(H,S,V);
               pix=a<<24|pix;
               outpixel[y*width+x]=pix;
           }
        }
        Bitmap newBitmap=Bitmap.createBitmap(width, height,Config.RGB_565);
        newBitmap.setPixels(outpixel, 0, width, 0, 0, width, height);
        destinationImage.setImageBitmap(newBitmap);
    }


public int HSVtoRGB(float h,float s,float v){
        float rr=0,gg=0,bb=0;
        float hh=(6*h)%6;
        int c1=(int)hh;
        float c2=hh-c1;
        float x=(1-s)*v;
        float y=(1-s*c2)*v;
        float z=(1-(s*(1-c2)))*v;
        switch(c1){
            case 0: rr=v;gg=z;bb=x;break;
            case 1: rr=y;gg=v;bb=x;break;
            case 2: rr=x;gg=v;bb=z;break;
            case 3: rr=x;gg=y;bb=v;break;
            case 4: rr=z;gg=x;bb=v;break;
            case 5: rr=v;gg=x;bb=y;break;
        }
        int N=256;
        int r=Math.min(Math.round(rr*N),N-1);
        int g=Math.min(Math.round(gg*N),N-1);
        int b=Math.min(Math.round(bb*N),N-1);
        return r<<16|g<<8|b;
    }

得到的效果是:


然后在网上看见一篇博客:http://blog.csdn.net/jia20003/article/details/8026552

是采用将RGB图转换为HSL图像改变亮度和饱和度的。大家可以参考下。

这篇关于RGB通过转换成HSV增加明度和饱和度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287165

相关文章

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

多重背包转换成0-1背包

http://acm.hdu.edu.cn/showproblem.php?pid=2191 多重背包特点: 一种物品有C个(既不是固定的1个,也不是无数个) 优化的方法: 运用神奇的二进制,进行物品拆分,转化成01背包 物品拆分,把13个相同的物品分成4组(1,2,4,6) 用这4组可以组成任意一个1~13之间的数! 原理:一个数总可以用2^

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

将浮点型算式的中缀表达式转换成后缀表达式并算出式子结果

最近因为需要了解如何将在Win应用程序控制台输入的算式表达式转化成其后缀表达式的算法,所以在网上搜索了一下,看到许多人的程序都只是对应于运算数在0~9的范围内的整型运算式,所以自己就写了一个可以计算浮点型算式的程序,一下是运行时的截图: 式子中的a,b,c是可供用户自行输入的变量。 首先,我先对输入的运算符进行了简单的合法性判断,我的判断代 码如下: //函数的传入参

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

Excel查询颜色RGB值

1.选中单元格,点右键,设置单元格格式-填充-其他颜色-自定义,下面显示的就是该单元格颜色的RGB值 2.与十六进制换算: https://www.sioe.cn/yingyong/yanse-rgb-16/