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

怎麼做正規化

尚未結案
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-15 14:25:22 IP:61.221.xxx.xxx 未訂閱
各位前輩請問一下,影像中的物體遠近怎麼把影像中的物體規劃到一定的距離 謝謝各位前輩 正在努力學習中的小弟
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-15 14:55:01 IP:61.222.xxx.xxx 未訂閱
不瞭解!看不懂
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-15 15:34:04 IP:163.23.xxx.xxx 未訂閱
不好意思,我再重複我的問題好了 假設影像為640*480 假設物體不動,我距離物體2公尺(第一張)跟我距離物體5公尺(第二張)作拍攝的動作 那麼第一張跟第二張影像裡的物體因為我距離物體的遠近不同而使物體大小不同 現在我想讓第一張跟第二張影像作正規化,使得兩張影像裡的物體看起來像我距離 物體1公尺拍的......非常謝謝.... 正在努力學習中的小弟
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-15 15:37:29 IP:163.23.xxx.xxx 未訂閱
我把圖檔傳上去.. 謝謝
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-15 15:40:32 IP:163.23.xxx.xxx 未訂閱
我把圖檔傳上去 謝謝各位前輩
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-16 03:38:17 IP:203.204.xxx.xxx 未訂閱
小慶 你好     我想這只是比例格放的問題吧!將5M拍下的影像,長寬各取1/5的像素就相當於距離1M所拍的影像,再將該影像縮放到目標像素即可以了。    如範例:(原圖代表5M的距離) 1.512/5=102:從原圖切割出102*102的影像出來(切割位置居中或靠左或靠右或任意)。 2.將102*102的影像放大到128*128 :(原圖代表4M的距離) 1.512/4=102:從原圖切割出128*128的影像出來。 2.將128*128的影像放大到128*128 (不用做) 若原圖代表4M的距離要取到相當1.5M的影像 1.512/4*1.5=102:從原圖切割出192*192的影像出來。 2.將192*192的影像縮小到128*128 這樣應該可以了解吧! _______________________________________ 深藍的魚,祝您好運..........連連 發表人 - chance36 於 2004/10/16 03:40:08
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-16 14:01:09 IP:163.23.xxx.xxx 未訂閱
不好意思....因為我是初學者所以程式有點不懂 我把我的程式以及圖檔傳上去請各位前輩幫我看看哪裡要改 .... ps:位神麼我的圖變這樣.. 謝謝各位 程式: void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *TheBitmap, *TempBitmap; TempBitmap = new Graphics::TBitmap(); TempBitmap =Image1->Picture->Bitmap; TempBitmap->PixelFormat = pf8bit; Byte *ptr1; int w,h,x,y,R,G,B;  w=Image1->Width/5;  h=Image1->Height/5;  //unsigned short int piexl[640][480];  int n=0;  for(int j=0;jScanLine[j]; for(int i=0;iCanvas->Pixels[x][y]; R=(int)c.Red; G=(int)c.Green; B=(int)c.Blue; TCColor b=Image2->Canvas->Pixels[x][y]; R=(int)b.Red; G=(int)b.Green; B=(int)b.Blue; } Image2->Canvas->Pixels[x][y]=TCColor(R,G,B).Color; } } 圖形如下:
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-20 12:23:42 IP:61.63.xxx.xxx 未訂閱
要不要把TempBitmap->PixelFormat = pf8bit; 改為TempBitmap->PixelFormat = pf24bit;試試~~~
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-20 16:41:35 IP:61.221.xxx.xxx 未訂閱
-------------------------------------------------------------------------------- 我把TempBitmap->PixelFormat = pf8bit; 改為TempBitmap->PixelFormat = pf24bit    ...    試一試圖形還是不行..... 正在努力學習中的小弟......
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-20 16:46:34 IP:61.221.xxx.xxx 未訂閱
我把TempBitmap->PixelFormat = pf8bit; 改為TempBitmap->PixelFormat = pf24bit    ...    試一試圖形還是不行..... 正在努力學習中的小弟......
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-20 17:03:09 IP:61.221.xxx.xxx 未訂閱
不好意思.......我按了兩次 所以po兩次......對不起... 正在努力中的小弟....
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-10-20 17:27:31 IP:61.63.xxx.xxx 未訂閱
嗯~~~建議你使用scanline 及指標的方式會比較簡單。程式如下 int i,j; int r,g,b; Byte *ptr11,*ptr21;  Graphics::TBitmap *A1 = new Graphics::TBitmap();  A1->LoadFromFile("2.bmp");  Graphics::TBitmap *B1 = new Graphics::TBitmap();  B1->PixelFormat=pf24bit; B1->Height=150; B1->Width=150;  B1->Palette=A1->Palette;  for(j=0;jHeight;j ) { ptr11=(Byte *)A1->ScanLine[j]; ptr21=(Byte *)B1->ScanLine[j]; for(i=0;iWidth;i ) { b=ptr11[i*3]; g=ptr11[i*3 1]; r=ptr11[i*3 2]; ptr21[i*3]=b; ptr21[i*3 1]=g; ptr21[i*3 2]=r; } } Image1->Picture->Assign(B1); delete A1; delete B1; 以上程式為假如A為(640*480)的影像檔,則抓取(150*150)至B中,然後在IMAGE1顯示出來。但是如果你的拍攝距離太遠,則所抓取的人臉也相對減少。 但人臉如果一定要限制在某個大小,則就必須要使用影像插點法下去做才行。 你先試試吧!應該可行。
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-10-20 17:30:02 IP:61.63.xxx.xxx 未訂閱
完整程式如下 : int i,j; int r,g,b; Byte *ptr11,*ptr21;  Graphics::TBitmap *A1 = new Graphics::TBitmap();  A1->LoadFromFile("2.bmp");  Graphics::TBitmap *B1 = new Graphics::TBitmap();  B1->PixelFormat=pf24bit; B1->Height=150; B1->Width=150;  B1->Palette=A1->Palette;  for(j=0;jHeight;j ) { ptr11=(Byte *)A1->ScanLine[j]; ptr21=(Byte *)B1->ScanLine[j]; for(i=0;iWidth;i ) { b=ptr11[i*3]; g=ptr11[i*3 1]; r=ptr11[i*3 2]; ptr21[i*3]=b; ptr21[i*3 1]=g; ptr21[i*3 2]=r; } } Image1->Picture->Assign(B1); delete A1; delete B1;
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-10-20 17:33:31 IP:61.63.xxx.xxx 未訂閱
奇怪~~~FOR 迴圈貼上有問題  ,重打如下 for(i=0;iWidth;i ) { for(j=0;jHeight;j ) { ....
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-10-20 18:25:29 IP:163.23.xxx.xxx 未訂閱
各位前輩..........我依照上面的程式寫了 for(j=0;j>=Height;j++) . . . for(i=0;i>=Width;i++) . . .....但是出來的圖怎麼是全白的呢............請前輩幫我看看發生事了 原圖:     處理完的圖: ......正在努力學習中的小弟.......謝謝各位前輩
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-10-21 09:14:50 IP:61.63.xxx.xxx 未訂閱
我不曉得你為何不行?我的bcb是5.0版的,程式如下,可以work, for(j=0;j<150;j ) //取150pixel的正方形大小圖案 { ptr11=(Byte *)A1->ScanLine[j]; ptr21=(Byte *)B1->ScanLine[j]; for(i=0;i<150;i ) { b=ptr11[i*3]; g=ptr11[i*3 1]; r=ptr11[i*3 2]; ....... 你可不可以再把你打的整段 post上來看看吧 !
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-10-21 14:02:20 IP:220.135.xxx.xxx 未訂閱
沒政府啦,發表程式都不按版規囉嗎? 麻煩下次發表程式時,請看版規,或尊照下面的方法更改 [ code ] 你的程式 [ / code] 實際使時,[]裡沒有空格的。 也請各位,把先前post的程式做個整理,謝謝合作。
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-10-26 11:07:26 IP:61.221.xxx.xxx 未訂閱
各位前輩...不好意思....小弟我前幾天鄭忙於其他事 所以沒辦法回信... 我正規化後變成以下的圖: 程式如下:
    void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j;
int r,g,b;
Byte *ptr11,*ptr21;
Graphics::TBitmap *A1 = new Graphics::TBitmap();
A1->LoadFromFile("c:\\5.bmp");
Graphics::TBitmap *B1 = new Graphics::TBitmap();
B1->PixelFormat=pf24bit;
B1->Height=150;
B1->Width=150;
B1->Palette=A1->Palette;
for(j=0;j<150;j++)
{
ptr11=(Byte*)A1->ScanLine[j];
ptr21=(Byte*)B1->ScanLine[j];
for(i=0;i<150;i++)
{
b=ptr11[i*3];
g=ptr11[i*3+1];
r=ptr11[i*3+2];
ptr21[i*3]=b;
ptr21[i*3+1]=g;
ptr21[i*3+2]=r;
}
}
Image1->Picture->Assign(B1);
delete A1;
delete B1;
}
謝謝各位前輩的指導 正在努力學習的小弟...
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-10-27 10:21:55 IP:220.135.xxx.xxx 未訂閱
麻煩下次發表程式時,請看版規,或尊照下面的方法更改 [ code] 你的程式 [ /code] 也請各位,把先前post的程式做個整理,謝謝合作。 提醒第二次
ben.huang
一般會員


發表:2
回覆:18
積分:4
註冊:2004-09-15

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-10-27 18:28:56 IP:61.63.xxx.xxx 未訂閱
嗯~~我實在是看不出那裡有問題, 只好請你再確認一次,你的原始圖檔是24bit的嗎? 我想也應該是吧!你的bcb是幾版的?
小慶
一般會員


發表:45
回覆:31
積分:15
註冊:2004-09-29

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-10-27 18:49:48 IP:163.23.xxx.xxx 未訂閱
前輩.........非常謝謝你的回應 小弟我的bcb是6.0版的.... 我想應該沒差吧.... 不過我的圖就是跑不出來... 奇怪..... 正在努力學習中的小弟....
系統時間:2024-04-25 15:50:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!