根据java中的颜色条件,将彩色图像转换为黑白(不是灰度)

时间:2015-12-30 20:10:48

标签: java image image-processing

我有一个图像(test.jpg),其中包含不同8种颜色的字母。 这8种颜色是:

R G B

0 0 0

0 255 0

0 0 255

0 255 255

255 0 0

255 0 255

255 255 0

255 255 255

我想用上面的8种颜色将这些字母颜色设置为黑色,并将所有颜色都放到白色 我尝试通过一些if语句来处理像素的红绿蓝值,但输出不是那么好。 有没有好的方法来执行这样的任务。 Test Image Output Image after if statement

for (int i = 0; i < height; i++) {
    for (int j = 0; j < width; j++) {
                Color c = new Color(bi.getRGB(j, i));
                      if((c.getRed()>200 && c.getBlue()<60 && c.getGreen()<60)||
                        (c.getRed()>200 && c.getBlue()<60 && c.getGreen()>200) ||
                        (c.getRed()>200 && c.getBlue()>200 && c.getGreen()<60) ||
                        (c.getRed()<60 && c.getBlue()>200 && c.getGreen()<60)||
                        (c.getRed()<60 && c.getBlue()<60 && c.getGreen()>200)||
                        (c.getRed()<60 && c.getBlue()>200 && c.getGreen()>200)|| 
                        (c.getRed()==255 && c.getBlue()==255 && c.getGreen()==255)||    
                        (c.getRed()==0 && c.getBlue()==0 && c.getGreen()==0))
                    imageOut.setRGB(j,i,black.getRGB());
                else
                    imageOut.setRGB(j, i, white.getRGB());
            }
        }

3 个答案:

答案 0 :(得分:0)

测试您列出的确切RGB值,然后程序将执行您指定的操作。例如......

if((c.getRed()== 255&amp;&amp; c.getBlue()== 0&amp;&amp; c.getGreen()== 0)||

答案 1 :(得分:0)

我会以下列方式更改if语句:

int red = c.getRed(), green = c.getGreen(), blue = c.getBlue();
if ((red   == 255 || red   == 0) &&
    (green == 255 || green == 0) &&
    (blue  == 255 || blue  == 0)) {
    imageOut.setRGB(j,i,black.getRGB());
} else {
    imageOut.setRGB(j, i, white.getRGB());
}

除此之外,您可以再次迭代所有像素并检查每个黑色像素是否有很多的其他黑色像素。这样你就可以去除某些地方的小黑色闪光。

然而,右侧的完全黑色区域将很难移除

答案 2 :(得分:0)

如果您有原件,可以进行减法。

否则你无法获得完美的结果 - 如果你在那之后

因为完全分开的间隔不能保证

您可能需要进入细分,但这不会给您带来完美的结果

查看是否存储在png中