我正在使用JAVA处理与彩色图像操作相关的项目。在java中以矩阵形式操作彩色图像
我认识彩色图像的成使用光栅类的方法的getSample的矩阵转换,
像素[X] [Y] = raster.getSample(X,Y,0);
我得到矩阵像素[] [](只有红色带的值)。 然后我转换的矩阵重新使用的WritableRaster作为图像,
raster.setSample(I,J,0,像素[i] [j]);
予使用,
* BufferedImage的图像=新的BufferedImage(W,H,BufferedImage.TYPE_INT_RGB)它转换为图像; image.setData(光栅); *
但问题是,
1)我要显示彩色图像,因为它是,而我得到仅在特定频段(如只能红色,只蓝色),因为我必须按照方法setSample的原型指定一个乐队,并获得enter code here
示例。
2)我怎样才能代表彩色图像(在3点不同的矩阵来表示所有3个波段)
下面的二维矩阵是我的代码片段的帮助下网上写的代码...
import java.awt.Image;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
class TestImage {
ImageIcon icon;
SampleModel sampleModel;
public static void main(String args[]){
TestImage mamu = new TestImage();
File file = new File("photo.jpg");
mamu.compute(file);
}
public void compute(File file){
try{
BufferedImage img= ImageIO.read(file);
Raster raster=img.getData();
sampleModel = raster.getSampleModel();
int w=raster.getWidth(),h=raster.getHeight();
int pixels[][]=new int[w][h];
for (int x=0;x<w;x++){
for(int y=0;y<h;y++){
pixels[x][y]=raster.getSample(x,y,0);
}
}
Image image = getImage(pixels);
JFrame frame = new JFrame("uff");
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
frame.setContentPane(label);
frame.setVisible(true);
frame.setSize(200,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}catch (Exception e){
e.printStackTrace();
}
}
public java.awt.Image getImage(int pixels[][]){
int w=pixels.length;
int h=pixels[0].length;
WritableRaster raster= Raster.createWritableRaster(sampleModel, new Point(0,0));
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
raster.setSample(i,j,0,pixels[i][j]);
}
}
BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
image.setData(raster);
File output=new File("check.jpg");
try {
ImageIO.write(image,"jpg",output);
}catch (Exception e){
e.printStackTrace();
}
return image;
}
}
以何种形式,你所需要的像素?这可能是相当容易的,如果你可以使用像素作为(1D)int []数组... – Marco13
@ Marco13我正在研究一个图像压缩项目,为此我需要三个不同波段的三个2d矩阵。在它的每一个,我应该应用压缩算法,后来结合这三个矩阵,并形成一个图像来显示。 – Akash
耶@马可夫13,甚至可以达到目的 – Akash