線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3576
推到 Plurk!
推到 Facebook!

影像合併 ~

答題得分者是:istillloving
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-21 12:32:00 IP:123.110.xxx.xxx 訂閱
各位大大好 ~
小弟最近在練習寫程式遇上了許多問題 近來這個版看見了許多大大的程式也找到了解決的方法可是最近在做影像合併時卻一直無法找到如何去寫出程式 小弟要寫的題目是 將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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-21 13:04:13 IP:140.127.xxx.xxx 訂閱
試試看


[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看看


參考
------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-21 13:15:24, 註解 無‧
istillloving 重新編輯於 2008-11-21 13:15:58, 註解 無‧
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-21 18:51:33 IP:210.71.xxx.xxx 訂閱
這位大大很謝謝你的幫 忙 但那並不是我要的方法
元件 image1 image2 <----------載入圖片 用一元件做 套合 將合併好的圖秀出在image3
有重疊的地方Pixels值要做運算 <-------要加相加除以2 這要以陣列方式表示
小弟 現在的問題是 不知道要如何用一元件做合併動作 而後將合併好的圖片秀在image3
------
丫風
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-21 18:58:03 IP:118.169.xxx.xxx 訂閱
不知道這篇是否可用?
圖檔合併
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=33967
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-21 19:07:12 IP:210.71.xxx.xxx 訂閱
感謝副站長的回應 
小弟要的合併不是一個前景圖和背景圖
是要兩張圖片做左右的合併 並非前後圖的合併
------
丫風
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-21 19:11:34 IP:118.169.xxx.xxx 訂閱
那這個呢?
圖檔的切割與合併
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=32813
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-21 19:40:07 IP:210.71.xxx.xxx 訂閱
謝謝副站長的回應 你給的這一程式是利用一張程式做切割和合併
小弟的題目是同一張圖 有偏右和偏左兩張這兩張圖做比對會有重疊的地方
小弟就是要把這重疊的地方得Pixels值 做運算合併然後秀出
一張圖的寬度是264 重疊的可是1公分 兩張合併後會將重疊的地方做運算 寛度可能是262 兩張圖變成一張 重疊的部份消失
例如 : ╡╞ 這兩個符號只是左右方向不同中間都有 1槓 做合併後=I= 重疊的地方變成一個 其它的地方都沒有改變
------
丫風
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-22 18:58:14 IP:220.129.xxx.xxx 訂閱
那請問你兩個問題

1.知道兩張照片是否平行?
2.知道重疊在哪裡?
------
恩...
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-22 19:08:14 IP:123.110.xxx.xxx 訂閱
這位發問的大大你好 
兩張圖寬一樣高一樣 重疊區用看圖程式一看就可以看的很清楚
例如先前一位大大用的是龍貓和加菲貓做前景和背景合併 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=33967

拿那一張龍貓的圖來說 高度不變 一張是左半部一張是右半部 左半的沒有那一支藍色的小龍貓 右半是大龍貓手之後的全不見
這樣兩張有重疊的部份不就是 大龍貓和那兩位小女孩 兩張圖做合併 寬度會變回原來一張沒有重疊時的大小 重疊區重新
運算處理變成沒有重疊
------
丫風
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-11-22 21:35:11 IP:218.172.xxx.xxx 訂閱
您好:

如果是高度不變的話而且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]
暫時先這樣 你可以試著寫看看把這些資訊存起來
------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-22 21:36:21, 註解 無‧
istillloving 重新編輯於 2008-11-23 00:34:09, 註解 無‧
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-11-22 21:58:04 IP:123.110.xxx.xxx 訂閱
這位大大 請問一下 -->double buff 這兩個是什麼作用?因為小弟認識的語法函式不多
大大 你寫的這程式 image2 和 image1 是分別載入那 ? 我如果要讓重疊部份Pixels值 寫成相加除2 這樣可以嗎 ?
再請問一個問題 如果我讓 image2和image1 的合併圖改成秀在image3會不會比較好
------
丫風
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-11-23 00:36:22 IP:218.169.xxx.xxx 訂閱
抱歉剛剛趕著去看電視

我改了一下大概是這種意思 看的懂嘛

我不知道程式能不能執行......最近才學BCB

感覺比VC複雜......

那你的相加除以2是有什麼用途呢?
------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-23 00:37:35, 註解 無‧
seiken
一般會員


發表:9
回覆:29
積分:7
註冊:2008-11-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-11-23 20:14:08 IP:123.110.xxx.xxx 訂閱
大大你好 ~ 
我讓讓重疊部份Pixels值 寫成相加除2是為什麼區分這是重疊部分有做過處理
再來我就是要另久加進一些類似低通濾波的程式運用好讓人有覺得這些圖是可以這樣做處理的
------
丫風
系統時間:2024-03-28 23:10:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!