java圖像,java圖像化界面

本文目錄一覽:

java中BufferedImage圖像有哪幾種類型?

Java的BufferedImage類是Image類的子類。屬於一種類型,它是用來處理和操作的圖像數據。

構造函數構造一個新BufferedImage一個具有指定ColorModel和Raster。

它計算的任意矩形區域BufferedImage並將其複製到指定的WritableRaster。

構造函數構造一個BufferedImage預定義圖像類型之一,TYPE_BYTE_BINARY或TYPE_BYTE_INDEXED。

它返回默認RGB顏色模型(TYPE_INT_ARGB)和默認sRGB色彩空間中的整數像素。

Java是一種高級編程語言被廣泛使用在現代世界。 它可以支持和處理的數字圖像處理有效地使用各種功能。

java數字圖像處理常用演算法

     前些時候做畢業設計 用java做的數字圖像處理方面的東西 這方面的資料ms比較少 發點東西上來大家共享一下 主要就是些演算法 有自己寫的 有人家的 還有改人家的 有的演算法寫的不好 大家不要見笑

一 讀取bmp圖片數據

//  獲取待檢測圖像  數據保存在數組 nData[] nB[]  nG[]  nR[]中

public  void getBMPImage(String source) throws Exception {                    clearNData();                        //清除數據保存區         FileInputStream fs = null;               try {            fs = new FileInputStream(source);            int bfLen = ;            byte bf[] = new byte[bfLen];            fs read(bf bfLen); // 讀取 位元組BMP文件頭            int biLen = ;            byte bi[] = new byte[biLen];            fs read(bi biLen); // 讀取 位元組BMP信息頭

// 源圖寬度            nWidth = (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) ) | (int) bi[ ] xff;

// 源圖高度            nHeight = (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) ) | (int) bi[ ] xff;

// 位數            nBitCount = (((int) bi[ ] xff) ) | (int) bi[ ] xff;

// 源圖大小            int nSizeImage = (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) )                    | (((int) bi[ ] xff) ) | (int) bi[ ] xff;

// 對 位BMP進行解析            if (nBitCount == ){                int nPad = (nSizeImage / nHeight) nWidth * ;                nData = new int[nHeight * nWidth];                nB=new int[nHeight * nWidth];                nR=new int[nHeight * nWidth];                nG=new int[nHeight * nWidth];                byte bRGB[] = new byte[(nWidth + nPad) * * nHeight];                fs read(bRGB (nWidth + nPad) * * nHeight);                int nIndex = ;                for (int j = ; j nHeight; j++){                    for (int i = ; i nWidth; i++) {                        nData[nWidth * (nHeight j ) + i] = ( xff)                                 | (((int) bRGB[nIndex + ] xff) )                                 | (((int) bRGB[nIndex + ] xff) )                                | (int) bRGB[nIndex] xff;                                              nB[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex] xff;                        nG[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex+ ] xff;                        nR[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex+ ] xff;                        nIndex += ;                    }                    nIndex += nPad;                } //               Toolkit kit = Toolkit getDefaultToolkit(); //               image = kit createImage(new MemoryImageSource(nWidth nHeight  //                       nData nWidth));

/*               //調試數據的讀取

FileWriter fw = new FileWriter( C:\\Documents and Settings\\Administrator\\My Documents\\nDataRaw txt );//創建新文件                PrintWriter out = new PrintWriter(fw);                for(int j= ;jnHeight;j++){                 for(int i= ;inWidth;i++){                  out print(( * +nData[nWidth * (nHeight j ) + i])+ _                     +nR[nWidth * (nHeight j ) + i]+ _                     +nG[nWidth * (nHeight j ) + i]+ _                     +nB[nWidth * (nHeight j ) + i]+ );                                   }                 out println( );                }                out close();*/                      }        }        catch (Exception e) {            e printStackTrace();            throw new Exception(e);        }         finally {            if (fs != null) {                fs close();            }        }     //   return image;    }

二 由r g b 獲取灰度數組

    public  int[] getBrightnessData(int rData[] int gData[] int bData[]){          int brightnessData[]=new int[rData length];     if(rData length!=gData length || rData length!=bData length       || bData length!=gData length){      return brightnessData;     }     else {      for(int i= ;ibData length;i++){       double temp= *rData[i]+ *gData[i]+ *bData[i];       brightnessData[i]=(int)(temp)+((temp (int)(temp)) ? : );      }      return brightnessData;     }          } 

三 直方圖均衡化

    public int [] equilibrateGray(int[] PixelsGray int width int height)     {                  int gray;         int length=PixelsGray length;         int FrequenceGray[]=new int[length];          int SumGray[]=new int[ ];          int ImageDestination[]=new int[length];         for(int i = ; i length ;i++)         {            gray=PixelsGray[i];               FrequenceGray[gray]++;         }           //    灰度均衡化          SumGray[ ]=FrequenceGray[ ];          for(int i= ;i ;i++){               SumGray[i]=SumGray[i ]+FrequenceGray[i];           }         for(int i= ;i ;i++) {               SumGray[i]=(int)(SumGray[i]* /length);           }         for(int i= ;iheight;i++)          {                for(int j= ;jwidth;j++)               {                   int k=i*width+j;                   ImageDestination[k]= xFF | ((SumGray[PixelsGray[k]]                             ) | (SumGray[PixelsGray[k]] ) | SumGray[PixelsGray[k]]);                }           }         return ImageDestination;      } 

四 laplace 階濾波 增強邊緣 圖像銳化

    public int[] laplace DFileter(int []data int width int height){         int filterData[]=new int[data length];     int min= ;     int max= ;     for(int i= ;iheight;i++){      for(int j= ;jwidth;j++){       if(i== || i==height || j== || j==width )               filterData[i*width+j]=data[i*width+j];       else        filterData[i*width+j]= *data[i*width+j] data[i*width+j ] data[i*width+j+ ]                             data[(i )*width+j] data[(i )*width+j ] data[(i )*width+j+ ]                             data[(i+ )*width+j] data[(i+ )*width+j ] data[(i+ )*width+j+ ];              if(filterData[i*width+j]min)        min=filterData[i*width+j];       if(filterData[i*width+j]max)        max=filterData[i*width+j];      }       }//     System out println( max: +max);//     System out println( min: +min);          for(int i= ;iwidth*height;i++){      filterData[i]=(filterData[i] min)* /(max min);     }     return filterData;    } 

五 laplace 階增強濾波 增強邊緣 增強係數delt

    public int[] laplaceHigh DFileter(int []data int width int height double delt){          int filterData[]=new int[data length];     int min= ;     int max= ;     for(int i= ;iheight;i++){      for(int j= ;jwidth;j++){       if(i== || i==height || j== || j==width )               filterData[i*width+j]=(int)(( +delt)*data[i*width+j]);       else        filterData[i*width+j]=(int)(( +delt)*data[i*width+j] data[i*width+j ]) data[i*width+j+ ]                             data[(i )*width+j] data[(i )*width+j ] data[(i )*width+j+ ]                             data[(i+ )*width+j] data[(i+ )*width+j ] data[(i+ )*width+j+ ];              if(filterData[i*width+j]min)        min=filterData[i*width+j];       if(filterData[i*width+j]max)        max=filterData[i*width+j];      }       }     for(int i= ;iwidth*height;i++){      filterData[i]=(filterData[i] min)* /(max min);     }     return filterData;    }  六 局部閾值處理 值化

    //   局部閾值處理 值化 niblack s   method    /*原理             T(x y)=m(x y)   +   k*s(x y)            取一個寬度為w的矩形框 (x y)為這個框的中心          統計框內數據 T(x y)為閾值 m(x y)為均值 s(x y)為均方差 k為參數(推薦 )計算出t再對(x y)進行切割 /             這個演算法的優點是     速度快 效果好             缺點是     niblack s   method會產生一定的雜訊        */        public int[] localThresholdProcess(int []data int width int height int w int h double coefficients double gate){     int[] processData=new int[data length];     for(int i= ;idata length;i++){      processData[i]= ;     }          if(data length!=width*height)      return processData;          int wNum=width/w;     int hNum=height/h;     int delt[]=new int[w*h];          //System out println( w; +w+   h: +h+   wNum: +wNum+ hNum: +hNum);          for(int j= ;jhNum;j++){      for(int i= ;iwNum;i++){     //for(int j= ;j ;j++){     // for(int i= ;i ;i++){         for(int n= ;nh;n++)               for(int k= ;kw;k++){                delt[n*w+k]=data[(j*h+n)*width+i*w+k];                //System out print( delt[ +(n*w+k)+ ]: +delt[n*w+k]+ );               }        //System out println();        /*        for(int n= ;nh;n++)               for(int k= ;kw;k++){                System out print( data[ +((j*h+n)*width+i*w+k)+ ]: +data[(j*h+n)*width+i*w+k]+ );               }        System out println();        */        delt=thresholdProcess(delt w h coefficients gate);        for(int n= ;nh;n++)               for(int k= ;kw;k++){                processData[(j*h+n)*width+i*w+k]=delt[n*w+k];               // System out print( delt[ +(n*w+k)+ ]: +delt[n*w+k]+ );               }        //System out println();        /*        for(int n= ;nh;n++)               for(int k= ;kw;k++){                System out print( processData[ +((j*h+n)*width+i*w+k)+ ]: +processData[(j*h+n)*width+i*w+k]+ );               }        System out println();        */      }      }          return processData;    } 

七 全局閾值處理 值化

    public int[] thresholdProcess(int []data int width int height double coefficients double gate){     int [] processData=new int[data length];     if(data length!=width*height)      return processData;     else{      double sum= ;      double average= ;      double variance= ;      double threshold;            if( gate!= ){       threshold=gate;       }      else{            for(int i= ;iwidth*height;i++){            sum+=data[i];            }            average=sum/(width*height);                  for(int i= ;iwidth*height;i++){              variance+=(data[i] average)*(data[i] average);            }            variance=Math sqrt(variance);            threshold=average coefficients*variance;      }               for(int i= ;iwidth*height;i++){          if(data[i]threshold)             processData[i]= ;          else                 processData[i]= ;         }               return processData;       }    } 

八  垂直邊緣檢測 sobel運算元

    public int[] verticleEdgeCheck(int []data int width int height int sobelCoefficients) throws Exception{     int filterData[]=new int[data length];     int min= ;     int max= ;     if(data length!=width*height)      return filterData;          try{            for(int i= ;iheight;i++){       for(int j= ;jwidth;j++){        if(i== || i== || i==height || i==height            ||j== || j== || j==width || j==width ){               filterData[i*width+j]=data[i*width+j];         }         else{          double average;            //中心的九個像素點             //average=data[i*width+j] Math sqrt( )*data[i*width+j ]+Math sqrt( )*data[i*width+j+ ]          average=data[i*width+j] sobelCoefficients*data[i*width+j ]+sobelCoefficients*data[i*width+j+ ]                         data[(i )*width+j ]+data[(i )*width+j+ ]                     data[(i+ )*width+j ]+data[(i+ )*width+j+ ];             filterData[i*width+j]=(int)(average);         }               if(filterData[i*width+j]min)         min=filterData[i*width+j];         if(filterData[i*width+j]max)         max=filterData[i*width+j];        }        }       for(int i= ;iwidth*height;i++){        filterData[i]=(filterData[i] min)* /(max min);         }          }     catch (Exception e)      {            e printStackTrace();            throw new Exception(e);        }            return filterData;    } 

九  圖像平滑 * 掩模處理(平均處理) 降低雜訊

lishixinzhi/Article/program/Java/hx/201311/26286

java中圖像與數組轉換

按照你的要求編寫的Java程序如下:( 要注意的地方見語句後面的注釋)

import java.awt.image.BufferedImage;

import java.awt.image.RenderedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageWithArray {

 public static void main(String[] args) {

  // 讀取圖片到BufferedImage

  BufferedImage bf = readImage(“c:\\tmp\\6\\female.png”);//這裡寫你要讀取的絕對路徑+文件名

  // 將圖片轉換為二維數組

  int[][] rgbArray1 = convertImageToArray(bf);

  // 輸出圖片到指定文件

  writeImageFromArray(“c:\\tmp\\2.png”, “png”, rgbArray1);//這裡寫你要輸出的絕對路徑+文件名

  System.out.println(“圖片輸出完畢!”);

 }

 public static BufferedImage readImage(String imageFile){

  File file = new File(imageFile);

  BufferedImage bf = null;

  try {

   bf = ImageIO.read(file);

  } catch (IOException e) {

   e.printStackTrace();

  }

  return bf;

 }

 public static int[][] convertImageToArray(BufferedImage bf) {

  // 獲取圖片寬度和高度

  int width = bf.getWidth();

  int height = bf.getHeight();

  // 將圖片sRGB數據寫入一維數組

  int[] data = new int[width*height];

  bf.getRGB(0, 0, width, height, data, 0, width);

  // 將一維數組轉換為為二維數組

  int[][] rgbArray = new int[height][width];

  for(int i = 0; i  height; i++)

   for(int j = 0; j  width; j++)

    rgbArray[i][j] = data[i*width + j];

  return rgbArray;

 }

 public static void writeImageFromArray(String imageFile, String type, int[][] rgbArray){

  // 獲取數組寬度和高度

  int width = rgbArray[0].length;

  int height = rgbArray.length;

  // 將二維數組轉換為一維數組

  int[] data = new int[width*height];

  for(int i = 0; i  height; i++)

   for(int j = 0; j  width; j++)

    data[i*width + j] = rgbArray[i][j];

  // 將數據寫入BufferedImage

  BufferedImage bf = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

  bf.setRGB(0, 0, width, height, data, 0, width);

  // 輸出圖片

  try {

   File file= new File(imageFile);

   ImageIO.write((RenderedImage)bf, type, file);

  } catch (IOException e) {

   e.printStackTrace();

  }

 }

}

運行結果:

圖片輸出完畢!

原圖:

輸出圖:

Java圖像去噪怎麼實現?

流程不外乎是

讀取圖像文件;

掃描噪點;

去除噪點;

保存圖像文件。

Java2D操作好像使用BufferedImage讀取圖像文件最方便,有一陣沒弄這了,忘了。應該可以讀取JPG,PNG,GIF圖像。

識別噪點應該有專門的演算法,我沒研究過,百度一下應該能找到專門演算法,然後寫段代碼就可以。我個人以為是獨立一個像素與周圍一定範圍內的像素差異過大,就認為是噪點。可以有亮度,色相上的差別。BufferedImage可以讀取每個像素的RGB,從而能識別色相的差別;還有個矩陣,用來由RGB計算亮度的,也就可以計算亮度差別了,這個網上都能找到。

輸出也使用BufferedImage就可以。

關鍵是每個像素都要和周圍像素比較,還要計算亮度,最少是三重循環了,如何提高效率是個大問題了。這個代碼寫好了也算一個高手了。

Java支持的圖像文件格式?

java1.0支持顯示gif和jpeg格式的圖像文件,這些文件的擴展名為.gif、.jpg或.jpeg。在java.awt.image包、java.awt包和java.applet包中都有對圖像的支持

如何用java轉換圖像格式為jpg

import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;

public class ImageFormat {

public static void main(String[] args) {

File file = new File(“c:\\test.jpg”);

changFormat(file, “png”, new File(“c:\\test.png”));// 轉為png

changFormat(file, “bmp”, new File(“c:\\test.bmp”));// 轉為bmp

//changFormat(file, “jpeg”, new File(“c:\\test.jpg”));// 轉為jpg

changFormat(file, “gif”, new File(“c:\\test.gif”));// 轉為gif

}

//第一個參數 原圖的File對象 第二個參數 目標格式 第三個參數 輸出圖像的File對象

public static void changFormat(File srcFile, String format, File formatFile) {

try {

BufferedImage srcImg = ImageIO.read(srcFile);// 讀取原圖

ImageIO.write(srcImg, format, formatFile);// 用指定格式輸出到指定文件

} catch (IOException e) {

e.printStackTrace();

}

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/153001.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-13 06:08
下一篇 2024-11-13 06:08

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • 如何實現圖像粘貼到蒙版

    本文將從多個方面介紹圖像粘貼到蒙版的實現方法。 一、創建蒙版 首先,在HTML中創建一個蒙版元素,用於接收要粘貼的圖片。 <div id=”mask” style=”widt…

    編程 2025-04-29

發表回復

登錄後才能評論