【发布时间】:2021-12-12 14:11:23
【问题描述】:
我正在尝试创建类似于罪恶之城或其他电影的效果,它们会从图像中移除除一种颜色之外的所有颜色。
我有一张 RGB 图像,我想将其转换为灰度,但我想保留一种颜色。
这是我的照片: Image to edit
我想保持红色。其余的应该是灰度的。
到目前为止,这是我的代码:
package poza;
import java.io.*;
public class poza {
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("poza.bmp");
BufferedInputStream dis=new BufferedInputStream(fis);
FileOutputStream sif=new FileOutputStream("poza1.bmp");
BufferedOutputStream bos=new BufferedOutputStream(sif);
byte[] sti=new byte[54];
dis.read(sti,0,54);
bos.write(sti);
while(dis.available()>0)
{
int b,g,r;
b=dis.read();
g=dis.read();
r=dis.read();
System.out.print(b+" "+g+" "+r+"\n");
int gri=(int)(0.114*b+0.587*g+0.299*r);
if(r>=b && r>=g)
{
bos.write(gri);
bos.write(gri);
bos.write(r);
}
else
{
bos.write(b);
bos.write(g);
bos.write(r);
}
System.out.print(b+" "+g+" "+r+"\n");
}
dis.close();
bos.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
【问题讨论】:
-
你能提供一个“一种颜色”的例子吗?假设我想保持“黄色”,这将涉及哪些值?
-
i.stack.imgur.com/YQNq3.png 你的意思是我要保留这张图片的哪个 rgb 代码?
-
stackoverflow.com/questions/69736054/… 我看到了这个链接,这正是我现在想要的,但他正在搜索 matlab 代码,而不是 java 代码。
-
要将非红色像素变为灰色,您的
else部分需要为 r g 和 b 写入相同的值。 -
你能给我代码示例吗?