導航:首頁 > 源碼編譯 > java圖像切割演算法

java圖像切割演算法

發布時間:2022-06-25 02:51:45

java實現整數拆分演算法,例如輸入一個4會輸出4 , 3 1, 2 2, 2 1

importjava.util.Scanner;//輸入的

publicclassABS{//外面建的點java的文件名必須和這個一樣


publicstaticinta[]=newint[12000];

staticvoidp(intn,intindex)//搜索
{

inti;
if(n<=0)//當n為0的時候輸出這種情況
{
System.out.print(a[0]);
for(i=1;i<index;System.out.print("+"+a[i++]));
System.out.print(" ");
return;//返回到函數調用的地方
}
for(i=index>0&&(n>=a[index-1])?a[index-1]:n;i>0;i--)
{//如果數組下標大於0且n剩餘的值大於等於上一個的值,那麼i就等於上一個的值,否則i就等於n
a[index]=i;
p(n-i,index+1);//在次調用
}
}

publicstaticvoidmain(String[]args){

Scannerin=newScanner(System.in);//從控制台中讀取輸入數據
intt;
t=in.nextInt();//輸入一個整數
if(t>=10000)
{
System.out.println("你輸入的數據超過1萬,太大咯!!!");
return;
}
p(t,0);
in.close();//關閉輸入
return;
}
}

這個只是可以實現10000 以內的數, 如果想大一點 就把數組開大一點局可以了!

⑵ java 把一個大圖切割成100份放入byte[],然後取上面10塊byte[]數組進行拼接

我是初學者,你看看有幫助不
public static void merge() throws IOException //文件拼接
{
Vector<FileInputStream>vector =new Vector<FileInputStream>();
for (int x=1;x<18 ;x++ )//我切了17份
{
vector.add(new FileInputStream("e:\\part\\"+ x +".part"));
}

Enumeration<FileInputStream> e=vector.elements();

SequenceInputStream sis =new SequenceInputStream(e);
FileOutputStream fos=new FileOutputStream("e:\\劉歡 - 情怨.mp3") ;
byte [] by =new byte [1024*1024];
int len =0;
while ((len=sis.read(by))!=-1)
{

fos.write(by,0,len);
}
fos.close();
sis.close();

⑶ Java的圖像演算法

//沒聽懂你的需求,能更清楚一些嗎?

我以前的一個程序使用BufferedImage讀取圖像像素點的RGB值,例子在下面。

你從例子中了解一下用一個整數表示RGB顏色的方法。然後用setRGB方法滿足你的要求。

方法:
java.awt.image.BufferedImage

public int getRGB(int x,int y)
返回默認 RGB 顏色模型 (TYPE_INT_ARGB) 和默認 sRGB 顏色空間中的整數像素。如果此默認模型與該圖像的 ColorModel 不匹配,則發生顏色轉換。在使用此方法所返回的數據中,每個顏色分量只有 8 位精度。

public void setRGB(int x, int y,int rgb)
將此 BufferedImage 中的像素設置為指定的 RGB 值。假定該像素使用默認 RGB 顏色模型、TYPE_INT_ARGB 和默認 sRGB 顏色空間。對於具有 IndexColorModel 的圖像,則選擇最接近的顏色的索引。
參數:
x - 要設置的像素的 X 坐標
y - 要設置的像素的 Y 坐標
rgb - RGB 值

例子:(獲取RGB值)---了解一下用一個整數表示RGB顏色的方法
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;

public class Test{
public static void main(String args[]) {
int[] rgb = new int[3];

File file = new File("a.bmp");
BufferedImage bi=null;
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}

int width=bi.getWidth();
int height=bi.getHeight();
int minx=bi.getMinX();
int miny=bi.getMinY();
System.out.println("width="+width+",height="+height+".");
System.out.println("minx="+minx+",miniy="+miny+".");

for(int i=minx;i<width;i++){
for(int j=miny;j<height;j++){
//System.out.print(bi.getRGB(jw, ih));
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
System.out.println("i="+i+",j="+j+":("+rgb[0]+","+rgb[1]+","+rgb[2]+")");

}
}

}

}

⑷ 圖像分割最好方法

1.基於閾值的分割方法

閾值法的基本思想是基於圖像的灰度特徵來計算一個或多個灰度閾值,並將圖像中每個像素的灰度值與閾值作比較,最後將像素根據比較結果分到合適的類別中。因此,該方法最為關鍵的一步就是按照某個准則函數來求解最佳灰度閾值。

閾值法特別適用於目標和背景占據不同灰度級范圍的圖。圖像若只有目標和背景兩大類,那麼只需要選取一個閾值進行分割,此方法成為單閾值分割;但是如果圖像中有多個目標需要提取,單一閾值的分割就會出現作物,在這種情況下就需要選取多個閾值將每個目標分隔開,這種分割方法相應的成為多閾值分割。
2.基於區域的圖像分割方法

基於區域的分割方法是以直接尋找區域為基礎的分割技術,基於區域提取方法有兩種基本形式:一種是區域生長,從單個像素出發,逐步合並以形成所需要的分割區域;另一種是從全局出發,逐步切割至所需的分割區域。
分水嶺演算法

分水嶺演算法是一個非常好理解的演算法,它根據分水嶺的構成來考慮圖像的分割,現實中我們可以想像成有山和湖的景象,那麼一定是水繞山山圍水的景象。

分水嶺分割方法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把圖像看作是測地學上的拓撲地貌,圖像中每一點像素的灰度值表示該點的海拔高度,每一個局部極小值及其影響區域稱為集水盆,而集水盆的邊界則形成分水嶺。分水嶺的概念和形成可以通過模擬浸入過程來說明。在每一個局部極小值表面,刺穿一個小孔,然後把整個模型慢慢浸入水中,隨著浸入的加深,每一個局部極小值的影響域慢慢向外擴展,在兩個集水盆匯合處構築大壩,即形成分水嶺。

⑸ 如何在Java中進行圖片剪裁 瘋狂JAVA

packagetest;

importjava.awt.Color;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.geom.AffineTransform;
importjava.awt.image.AffineTransformOp;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.nio.Buffer;

importjavax.imageio.ImageIO;
importjavax.imageio.stream.ImageOutputStream;

/**
*裁剪、縮放圖片工具類
*
*@authorCSDN沒有夢想-何必遠方
*/
publicclassImgUtils{
/**
*縮放圖片方法
*
*@paramsrcImageFile
*要縮放的圖片路徑
*@paramresult
*縮放後的圖片路徑
*@paramheight
*目標高度像素
*@paramwidth
*目標寬度像素
*@parambb
*是否補白
*/
publicfinalstaticvoidscale(StringsrcImageFile,Stringresult,
intheight,intwidth,booleanbb){
try{
doubleratio=0.0;//縮放比例
Filef=newFile(srcImageFile);
BufferedImagebi=ImageIO.read(f);
Imageitemp=bi.getScaledInstance(width,height,bi.SCALE_SMOOTH);//bi.SCALE_SMOOTH
//選擇圖像平滑度比縮放速度具有更高優先順序的圖像縮放演算法。
//計算比例
if((bi.getHeight()>height)||(bi.getWidth()>width)){
doubleratioHeight=(newInteger(height)).doubleValue()
/bi.getHeight();
doubleratioWhidth=(newInteger(width)).doubleValue()
/bi.getWidth();
if(ratioHeight>ratioWhidth){
ratio=ratioHeight;
}else{
ratio=ratioWhidth;
}
AffineTransformOpop=newAffineTransformOp(AffineTransform//仿射轉換
.getScaleInstance(ratio,ratio),null);//返回表示剪切變換的變換
itemp=op.filter(bi,null);//轉換源BufferedImage並將結果存儲在目標
//BufferedImage中。
}
if(bb){//補白
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);//構造一個類型為預定義圖像類型之一的
//BufferedImage。
Graphics2Dg=image.createGraphics();//創建一個
//Graphics2D,可以將它繪制到此
//BufferedImage中。
g.setColor(Color.white);//控制顏色
g.fillRect(0,0,width,height);//使用Graphics2D上下文的設置,填充Shape
//的內部區域。
if(width==itemp.getWidth(null))
g.drawImage(itemp,0,(height-itemp.getHeight(null))/2,
itemp.getWidth(null),itemp.getHeight(null),
Color.white,null);
else
g.drawImage(itemp,(width-itemp.getWidth(null))/2,0,
itemp.getWidth(null),itemp.getHeight(null),
Color.white,null);
g.dispose();
itemp=image;
}
ImageIO.write((BufferedImage)itemp,"JPEG",newFile(result));//輸出壓縮圖片
}catch(IOExceptione){
e.printStackTrace();
}
}

/**
*裁剪圖片方法
*
*@parambufferedImage
*圖像源
*@paramstartX
*裁剪開始x坐標
*@paramstartY
*裁剪開始y坐標
*@paramendX
*裁剪結束x坐標
*@paramendY
*裁剪結束y坐標
*@return
*/
(BufferedImagebufferedImage,
intstartX,intstartY,intendX,intendY){
intwidth=bufferedImage.getWidth();
intheight=bufferedImage.getHeight();
if(startX==-1){
startX=0;
}
if(startY==-1){
startY=0;
}
if(endX==-1){
endX=width-1;
}
if(endY==-1){
endY=height-1;
}
BufferedImageresult=newBufferedImage(endX-startX,endY-startY,
4);
for(intx=startX;x<endX;++x){
for(inty=startY;y<endY;++y){
intrgb=bufferedImage.getRGB(x,y);
result.setRGB(x-startX,y-startY,rgb);
}
}
returnresult;
}

publicstaticvoidmain(String[]args)throwsIOException{
Fileinput=newFile("input.jpg");
BufferedImageimg=ImageIO.read(input);
cropImage(img,10,10,20,20);
Fileoutput=newFile("output.jpg");
ImageIO.write(img,"jpg",output);
}
}

⑹ 尋求一個面板切割最優解的演算法,可以用C、C++或Java編寫。尋求高手幫助,如果演算法正確高效,將再補10分

這時一個多目標組合優化問題,NP完全問題,沒有那麼簡單,屬於世界性的難題。可以使用遺傳演算法、粒子群演算法等模擬演化演算法求解得到一個近優解,沒有演算法能保證得到一個最優解。

⑺ 怎麼用java切割出不規則圖形的圖片

//用基本圖形拼呀

import java.awt.Graphics;

import javax.swing.*;


public class IrregulaShape extends JPanel{



@Override
public void paint(Graphics g) {
super.paint(g);
g.drawRect(100, 50,100, 100);
g.drawArc(100, 25, 50, 50, 0, 180);


//g.fillRect(100, 50, 100, 100);
//g.fillOval(100, 25, 50, 50);
}
public static void main(String[] args) {
JFrame jFrame = new JFrame("不規則的!");
IrregulaShape j = new IrregulaShape();
jFrame.add(j);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(500,500);
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);

}

}

⑻ 用java如何將一張圖片切割成九塊,然後保存在自己的系統盤里

用bufferImage類的SubImage方法,切割,然後用ImageIO的靜態方法,write寫出到文本。

⑼ 用java做拼圖游戲,怎麼把圖片切割成不規則形狀

以我現在的知識,我還不知道如何更簡單的去做。
但如果以實現方式來講,
一種是人工將圖片這種形狀

一種是 非常麻煩,需要程序進行大量計算。要對圖片轉換成 int 數值 有所了解
我想我只能提供你思路,因為具體實現是比較麻煩的
因為我不是講語文的,不知道能不能說明白,比較意識流。。。

人工將圖片的幾種形狀畫出一種以指定顏色背景的半透明的圖,,
比如方案為
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■□■□□■□□■□□■□■■
□□□□□□□□□□□□□□□□
□□■□□□□■■□□□□■□□
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■■□□■■■■□□■■■■

我想我畫的試例圖你明白了吧,是可以進行對接拼圖的

一個比如說紅色圖片 4*4大小的,那麼他轉成int數據時就是
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0xffff0000 0xffff0000 0xffff0000 0xffff0000
0x後面的ff表示是不透明的
第二個ff及後面的4個0表示圖片顏色前2位是紅中間是綠最後是藍 這一點你可以用photoshop去查看
比如我上面第一張圖的數據,轉成int 數據時,就應該是

A B C D
1 0xffff0000 0xffff0000 0xffff0000 0xffff0000
2 0xffff0000 0xffff0000 0xffff0000 0x00ffffff
3 0xffff0000 0xffff0000 0xffff0000 0xffff0000
4 0xffff0000 0xffff0000 0xffff0000 0x00ffffff
5 0xffff0000 0xffff0000 0x00ffffff 0xffff0000

其中 D2 D4 及C5的位置是透明的0x00表示透明
說到這,也就是說,你應該能通過你生成的那幾個指定的圖片獲得這幾個圖片對應的數據模板
之後你將你的要拼圖的圖片,按你設計好的模板拼圖方式,生成圖片塊 注意,因為你要的效果是兩個圖片對接的,所以在生成的時候,也要注意,是對接的

如果你做到這一步,(或說成,你能想明白到這一步,哪怕不知道怎麼做,沒關系)

你這時應該能得到每塊圖片,和每塊圖片對應的是哪種模板
將這塊圖片轉成int 數組形式的 數據文件。
之後將這個數據文件與對應的模板數據文件進行對應,
當發現你的模板的數據值為0x00ffffff時,就說明這個位置的顏色應該是透明的,這時因為你的圖片數據與模版數據ID是相對應的,直接找到圖片數據ID,將他的值改為0x00ffffff就可以了。

到這一步,你應該可以實現將所有分割後的圖片,在數據上轉換成了你想要的樣子。
這時,你只要通過一些函數將數據文件轉換成圖片格式就行了。

因為我做的是手機方面的,你用的可能是J2SE吧,API我不是很熟,不能提供具體的方法。

⑽ 如何用java實現切割一張圖片

BufferedImage類有一個getSubimage()方法,以下來自API
public BufferedImage getSubimage(int x,
int y,
int w,
int h)
返回由指定矩形區域定義的子圖像。返回的 BufferedImage 與源圖像共享相同的數據數組。
參數:
x - 指定矩形區域左上角的 X 坐標
y - 指定矩形區域左上角的 Y 坐標
w - 指定矩形區域的寬度
h - 指定矩形區域的高度
返回:
BufferedImage,它是此 BufferedImage 的子圖像。
拋出:
RasterFormatException - 如果指定區域不包含在此 BufferedImage 中

閱讀全文

與java圖像切割演算法相關的資料

熱點內容
mysql空值命令 瀏覽:211
python整點秒殺 瀏覽:882
怎麼樣互傳app 瀏覽:290
python分布式抓包 瀏覽:34
輕量級php論壇 瀏覽:340
如何查看應用存儲在哪個文件夾 瀏覽:434
app開發項目范圍怎麼寫 瀏覽:74
androidjms 瀏覽:841
彈珠連貫解壓 瀏覽:241
程序員的網課 瀏覽:902
廣東加密狗防拷貝公司 瀏覽:448
rtf轉換pdf 瀏覽:348
單片機退出中斷 瀏覽:139
可以對單個內容加密的便簽 瀏覽:825
1024程序員節小米 瀏覽:316
共享和ftp伺服器有什麼區別 瀏覽:715
centos7卸載php 瀏覽:184
解壓黏黏球如何玩 瀏覽:230
位域結構體編譯樹形描述 瀏覽:655
宏基手機如何裝安卓系統 瀏覽:746