影像合併 ~ |
答題得分者是:istillloving
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
各位大大好 ~
小弟最近在練習寫程式遇上了許多問題 近來這個版看見了許多大大的程式也找到了解決的方法可是最近在做影像合併時卻一直無法找到如何去寫出程式 小弟要寫的題目是 將2張圖片合成一張圖片(圖片是同一張 只是角度不一樣 偏右 偏左 中間 )要將2張圖片有重疊的地方合併 我有看見許多大大寫的影像結合的程式 但是程式寫的是將兩張圖不同處結合成一張 小弟要寫的卻是兩張圖合成一張(偏左 中間或是中間 偏右) 圖片高度不變寬度卻會因圖片合併而改變 圖片是經由 image1 image2 抓取出來 將圖合成秀在image3 希望各位大大能幫忙指導一下 小弟只寫的出這一些 Image1->Width=264; Image1->Height=390; Image1->Stretch=true; Image1->Picture->Bitmap->LoadFromFile("169.bmp"); Image2->Width=264; Image2->Height=390; Image2->Stretch=true; Image2->Picture->Bitmap->LoadFromFile("168.bmp"); Image3->Width= ; <-----因為image1 image2合併要將重疊部份削去寬度未知 Image3->Height=390; Image3->Stretch=true; Image3->Canvas->CopyMode=cmSrcAnd; SetStretchBltMode(Image4->Canvas->Handle, STRETCH_HALFTONE); Image4->Picture->Bitmap->SaveToFile("00a.bmp");
------
丫風 |
istillloving
高階會員 ![]() ![]() ![]() ![]() 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
試試看
[code cpp] /*用buff 1 & 2 分別存Image 1 & 2 的RGB值 你可以試著用struct去做看看 color=Form1->Image1->Picture->Bitmap->Canvas->Pixels[i][j]; R[i][j]=GetRValue(color); G[i][j]=GetGValue(color); B[i][j]=GetBValue(color); */ //然後再用buff3存 1和2 //buff3宣告長寬的時候應該是要1和2的長寬相加然後用兩層for loop把1&2的值填進去3裡面 //如果1在左2在右那1從(0.0)填入那2就必須從1的w 的地方開始填直到 w*2 h為止 //再宣告一個TBitmap()指標來秀出圖 TheBitmap=new Graphics::TBitmap(); TheBitmap->Height=Image1->Height Image2->Height; TheBitmap->Width=Image1->Width Image2->Width; TheBitmap->Canvas->Pixels[i][j]=(TColor)RGB(R[i][j],G[i][j],B[i][j]); [/code] 程式不完整 我很多地方都用口語下去寫的 你自己可能要try看看 參考
------
恩...
編輯記錄
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
|
istillloving
高階會員 ![]() ![]() ![]() ![]() 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
這位發問的大大你好
兩張圖寬一樣高一樣 重疊區用看圖程式一看就可以看的很清楚 例如先前一位大大用的是龍貓和加菲貓做前景和背景合併 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=33967 拿那一張龍貓的圖來說 高度不變 一張是左半部一張是右半部 左半的沒有那一支藍色的小龍貓 右半是大龍貓手之後的全不見 這樣兩張有重疊的部份不就是 大龍貓和那兩位小女孩 兩張圖做合併 寬度會變回原來一張沒有重疊時的大小 重疊區重新 運算處理變成沒有重疊
------
丫風 |
istillloving
高階會員 ![]() ![]() ![]() ![]() 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
您好:
如果是高度不變的話而且Image1右邊和Image2左邊有相同的地方 你可以用Image1右邊的最後一條垂直線拿來和Image2左邊第一條垂直線開始比對 找到相同的之後就可以把寬度加起來 再NEW一個陣列存起來這樣應該就可以了吧 用buff1.buff2分別代表Image1.Image2 [code cpp] double data[h]={0},match=0,min=0; for(i=0;i data[i]=buff1[w][i]; } for(i=0;i for(j=0;j match =(data[j]-buff2[i][j])*(data[j]-buff2[i][j]); } if(match==0)/*你可以調這個值因為就算用肉眼看起來是一樣的 可以用數直下去計算的時候應該還是會有一些差距*/ { min=i;/*這裡可能也要做一些限制 不然微調match後可能會找到很多條一樣的*/ } } double *buff3=new double[2*w-min][h]; for(i=0;i<(2*w-min);i ) { for(j=0;j buff3[i][j]=buff1[i][j]; buff3[i][j]=buff[i w min][j]; } } [/code] 暫時先這樣 你可以試著寫看看把這些資訊存起來
------
恩...
編輯記錄
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
|
istillloving
高階會員 ![]() ![]() ![]() ![]() 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
抱歉剛剛趕著去看電視
我改了一下大概是這種意思 看的懂嘛 我不知道程式能不能執行......最近才學BCB 感覺比VC複雜...... 那你的相加除以2是有什麼用途呢?
------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-23 00:37:35, 註解 無‧
|
seiken
一般會員 ![]() ![]() 發表:9 回覆:29 積分:7 註冊:2008-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |