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);
}
}
}
您需要注意的是,每种颜色都由3个值或通道表示,即红色、绿色和蓝色。如果你只保留其中一个频道,你会扭曲结果。
相反,您需要决定一个像素应该保留其原始颜色还是变成灰度。因此,假设您的代码已经正确地进行了灰度转换,它可以归结为:
if( keepColor ) {
//I'll keep the order of the components that your example uses, make sure this is correct
bos.write(b);
bos.write(g);
bos.write(r);
} else {
bos.write(gri); //b
bos.write(gri); //g
bos.write(gri); //r
}
所以剩下的就是如何定义keepcolor
了,这取决于您的需求。一个简单的选择可能是选择一种颜色,并检查像素是否在该颜色的某个阈值内,例如:
/**
* value - the value to check
* base - the base value to check against, i.e. the center of the range, expressed in range [0, 255]
* difference - the allowable difference in percent, expressed in range [0.0, 1.0]
*/
boolean withinThreshold(int value, int base, double difference) {
return value>= base * (1-difference) //check lower bound
&& value <= base * (1+difference); //check upper bound
}
boolean keepColor = withinThreshold(r, 228, 0.6) //40%-160% of 228
&& withinThreshold(g, 95, 0.6) //40%-160% of 95
&& withinThreshold(b, 78, 0.6); //40%-160% of 78
问题内容: 我试图用来读取RGB图像并将其转换为灰度。 在matlab中,我使用以下代码: 在matplotlib教程中,他们没有介绍。他们只是读了图像 然后将它们切成薄片,但这与根据我的理解将RGB转换为灰度不是同一回事。 我发现很难相信numpy或matplotlib没有将rgb转换为灰色的内置函数。这不是图像处理中的常见操作吗? 我写了一个非常简单的函数,可以在5分钟内使用导入的图像。这是非
问题内容: 我正在学习使用OpenCV进行实时应用程序的图像处理。我对图像进行了一些阈值处理,并希望将轮廓标记为绿色,但是由于我的图像是黑白图像,所以它们没有显示为绿色。 在程序的早期,我曾经将RGB转换为灰度,但是回过头来,我很困惑,该函数给出了: AttributeError:“模块”对象没有属性“ CV_GRAY2RGB”。 下面的代码似乎不是用绿色绘制轮廓。这是因为它是灰度图像吗?如果是这
我正在学习使用OpenCV进行图像处理的实时应用程序。我对一个图像做了一些阈值化,想要用绿色标记轮廓,但它们没有显示在绿色中,因为我的图像是黑白的。 在程序的早期,我使用将RGB转换为灰度,但回到前面,我感到困惑,函数给出的是: AttributeError:“module”对象没有属性“cv_gray2rgb”。 下面的代码似乎没有用绿色绘制轮廓。这是因为它是灰度图像吗?如果是,我可以将灰度图像
图像中的每个像素都有一个rgb值,看起来像[r g b],其中r、g、b是从0到255的整数值。 现在,让我们定义8个rgb颜色极端: [0]黑色 [0 255]蓝色 [0 255 0]绿色 [0 255]青色 [255 0 0]红色 [255 0 255]洋红色 [255 0]黄色 [255]白色。 Matlab中有没有一种有效的方法,或者Matlab中的一个函数,可以将一幅图像转换成另一幅具有
我有一个返回十进制值的java代码,如下所示 第一个值表示红色的颜色代码,第二个值表示绿色的颜色代码,第三个值表示蓝色的颜色代码。 有没有什么方法可以将这些RGB值转换为java中相应的颜色?
问题内容: 我正在使用aparapi编写Buddhabrot分形生成器。我将其中的OpenCL部分工作了,得到了一个表示每个像素的单维数组。我将最终图像的尺寸作为最终整数,并编写了代码以获取该数组中任意点的索引。我想将其另存为图像,并且尝试将BufferedImage与TYPE_USHORT_GRAY一起使用。这是我到目前为止的内容: 问题是,我不知道将RGB设置为什么。我需要做什么? 问题答案: