在java中处理矩阵形式的彩色图像
我正在从事一个与使用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的原型指定波段,并在此处获得在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
输入代码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);