Android如何判定一张图片是不是灰度的

现在想判定一个jpg图片是不是灰度的,只看颜色通道是不行的

见代码,分析每个像素 rgb是否近似相等

/**
     * 判断一个点是否为灰色,
     * @param R
     * @param G
     * @param B
     * @param H
     * @param S
     * @param V
     * @return 是否为灰色
     */
    private  static boolean isGrey_1(int R, int G, int B, int H, int S, int V)
    {
        // C4C9C8
        //F7EEEA
        //225 6 97
        //if (((H >= 0 && H < 180) && (S >= 0 && S < 43) && (V >= 46 && V <= 255))//白色
        int x = (R+G+B)/3;


        int TotalGrey = Math.abs(R-x)+Math.abs(G-x)+Math.abs(B-x);

        if (((H >= 0 && H <= 255) && (S >= 0 && S < 43) && (V >= 46 && V <= 255))//白色
                || ((H >= 0 && H <= 226) && (S >= 0 && S < 43) && (V >= 46 && V < 220))//灰色
                || ((H >= 0 && H < 180) && (S >= 0 && S < 60) && (V >= 46 && V < 230))//灰色
        )
        {
            return true;
        }
        //不能全黑
        if(TotalGrey<30&&x>5)
        {
            return true;
        }
        return false;
    }

private  static double  isDocument(  Bitmap  src,int level ) {
        //用于检测灰色比例显示
        double MyRedColorProportionWithWhiteColor=0;
        int w=src.getWidth();
        int h=src.getHeight();//红头文件必须上半部有红字
        int[]pixels=new int[w*h];
        src.getPixels(pixels,0,w,0,0,w,h);
        int H = 0, S = 0, V =0;
        int R =0, G = 0, B = 0;
        double goodRedPoints = 0;
        double goodWhitePoints = 1;
        for (int i = 0; i < h; i++)
        {
            for (int j = 0; j < w; j++)
            {
                int mColor=pixels[i*w+j];
                float[] hsv = new float[3];//定义一个长度为3的数组
                Color.colorToHSV(mColor, hsv);//转化hsv
                R=(mColor>>16)&0xff;
                G=(mColor>>8)&0xff;
                B=(mColor)&0xff;
                H=(int)hsv[0];
                S=(int)(hsv[1]*100);
                V=(int)(hsv[2]*100);


                if (isGrey_1(R, G, B, H, S, V)==true)//灰色
                {
                    goodWhitePoints++;
                }
            }
        }
        double whiteRate= (double)((double)(goodWhitePoints)/(w*h));
        return whiteRate;

    }

如果rgb 与平均值 偏移较大则认为是彩色的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值