在java中处理矩阵形式的彩色图像

在java中处理矩阵形式的彩色图像,java,eclipse,swing,raster,Java,Eclipse,Swing,Raster,我正在从事一个与使用JAVA进行彩色图像处理相关的项目 我了解了如何使用Raster类的getSample方法将彩色图像转换为矩阵 像素[x][y]=光栅.getSample(x,y,0) 我得到的矩阵是像素[][](只有红色带的值)。 然后我使用WritableRaster将矩阵转换回图像 光栅。设置样本(i,j,0,像素[i][j]) 我用 *BuffereImage image=新的BuffereImage(w,h,BuffereImage.TYPE_INT_RGB); image.set

我正在从事一个与使用JAVA进行彩色图像处理相关的项目

我了解了如何使用Raster类的getSample方法将彩色图像转换为矩阵

像素[x][y]=光栅.getSample(x,y,0)

我得到的矩阵是像素[][](只有红色带的值)。 然后我使用WritableRaster将矩阵转换回图像

光栅。设置样本(i,j,0,像素[i][j])

我用

*BuffereImage image=新的BuffereImage(w,h,BuffereImage.TYPE_INT_RGB); image.setData(光栅)*

但问题是,

1) 我希望彩色图像按原样显示,而我只得到一个特定的波段(如仅红色、仅蓝色..),因为我必须根据方法setSample的原型指定波段,并在此处获得
输入代码
Sample

2) 如何获得表示彩色图像的2d矩阵(在3个不同矩阵中表示的所有3个频带)

下面是我在联机代码片段的帮助下编写的代码

导入java.awt.Image; 导入java.awt.Point; 导入java.awt.image.buffereImage; 导入java.awt.image.graster; 导入java.awt.image.SampleModel; 导入java.awt.image.WritableRaster; 导入java.io.File; 导入javax.imageio.imageio; 导入javax.swing.ImageIcon; 导入javax.swing.JFrame; 导入javax.swing.JLabel; 类测试图像{ 图像图标; 样本模型样本模型; 公共静态void main(字符串参数[]){ TestImage mamu=新TestImage(); File File=新文件(“photo.jpg”); mamu.compute(文件); } 公共void计算(文件){ 试一试{ BuffereImage img=ImageIO.read(文件); 光栅=img.getData(); sampleModel=raster.getSampleModel(); int w=graster.getWidth(),h=graster.getHeight(); 整数像素[][]=新整数[w][h]; 对于(int x=0;x您可能正在查看或,它使用a整体修改波段。引用了几个示例。下图说明了反转:

short[] invert = new short[256];
for (int i = 0; i < 256; i++) {
    invert[i] = (short) (255 - i);
}
BufferedImageOp invertOp = new LookupOp(new ShortLookupTable(0, invert), null));
invertOp.filter(src, dst);
short[]invert=新的short[256];
对于(int i=0;i<256;i++){
反转[i]=(短)(255-i);
}
BufferedImageOp invertOp=new LookupOp(new ShortLookupTable(0,inverte),null);
反向滤波器(src、dst);

您需要哪种形式的像素?如果您可以将像素作为(1D)int[]来使用,这将非常容易数组…@Marco13我正在做一个图像压缩项目,我需要三个不同波段的2d矩阵。在每个项目上,我都应该应用压缩算法,然后将这三个矩阵组合成一个图像来显示。是的,对@Marco13,即使这样也可以达到目的
short[] invert = new short[256];
for (int i = 0; i < 256; i++) {
    invert[i] = (short) (255 - i);
}
BufferedImageOp invertOp = new LookupOp(new ShortLookupTable(0, invert), null));
invertOp.filter(src, dst);