我正在使用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