java图像处理---特殊颜色二值化处理

特殊颜色二值化处理(此处以RGB为例)

(1)输入一张图片(jpg已经测试)
(2)创建一个图片的缓存区   grayImage
(3)对输入图片各个像素进行处理,
    逻辑:
        当red > testnum || green > testnum || blue > testnum
        red + green < testnum*1.5  &&   red + blue < testnum*1.5
        && green + blue < testnum*1.5  &&   red + green + blue < testnum*1.5
    改变此逻辑即可实现对特殊 RGB 的二值化处理
(4)输出图片

输入:
    RGB 彩色图片
输出:
    特殊色彩区域为白色,其他区域为黑色

源码如下:

功能函数:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


/*
 * 灰度化处理函数,,特殊的灰度化处理,,使用了加权平均数方法,使得处理后的图像更加真实清晰
 */
public class specialColor {
    private static int colorToRGB(int alpha, int red, int green, int blue) {

        int testnum = 0xbb;
        if (red > testnum || green > testnum || blue > testnum)
            if(red + green < testnum*1.5
                && red + blue < testnum*1.5
                && green + blue < testnum*1.5
                && red + green + blue < testnum*1.5)

                return 0xffffffff;
            else return 0xff000000;
        else return 0xff000000;

        //  return 0xff000000;  //黑色
        //else return 0xffffffff;   //白色


}
public void processPicture(Graphics graphics) throws IOException {
    BufferedImage bufferedImage 
        = ImageIO.read(new File("specialColor.jpg"));
    BufferedImage grayImage = 
        new BufferedImage(bufferedImage.getWidth(), 
                          bufferedImage.getHeight(), 
                          bufferedImage.getType());

    for (int i = 0; i < bufferedImage.getWidth(); i++) {
        for (int j = 0; j < bufferedImage.getHeight(); j++) {
            final int color = bufferedImage.getRGB(i, j);
            final int r = (color >> 16) & 0xff;
            final int g = (color >> 8) & 0xff;
            final int b = color & 0xff;
            int newPixel = colorToRGB(255, r, g, b);
            grayImage.setRGB(i, j, newPixel);

            //System.out.print(r+" "+g+" "+b);return;
        }
    }
    graphics.drawImage(bufferedImage, 0, 0, 380, 400,null);
    graphics.drawImage(grayImage,400,0, 380,400,null);
}
}

测试函数:

public static void main(String args[]){

        //创建窗口
        JFrame mFrame = new JFrame();
        mFrame.setSize(800, 500);
        mFrame.setVisible(true);
        mFrame.add(new gray());
        }

    //重写paint 方法 画图
    public void paint(Graphics g){

        try {
            new specialColor().processPicture(g);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

这里写图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鼠晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值