全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1380
推到 Plurk!
推到 Facebook!

各位大大---請教前景減背景,為什麼行不通,搞不定

尚未結案
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-05 20:49:30 IP:211.74.xxx.xxx 未訂閱
BMP2->PixelFormat=pf24bit; capSetCallbackOnFrame (hCapWnd, &FrameCallBack); Byte *ptr1, *ptr2,*ptr3 = NULL; ForeGroundBitmap=Image3->Picture->Bitmap;//前景 BackGroundBitmap=Image1->Picture->Bitmap;//背景 BMP2=Image2->Picture->Bitmap;  for (int y=0;y<240;y ) { ptr3=(Byte*)ForeGroundBitmap->ScanLine[y]; ptr1=(Byte*)BackGroundBitmap->ScanLine[y]; ptr2=(Byte*)BMP2->ScanLine[y]; for (int x=0;x<320;x ) { int d=abs((int)ptr3[x*3]-(int)ptr1[x*3]); if(d>Threshold) { ptr2[3*x]=0; ptr2[3*x 1]=0; ptr2[3*x 2]=0; } else { ptr2[3*x 2]=ptr1[3*x]; ptr2[3*x 1]=ptr1[3*x]; ptr2[3*x]=ptr1[3*x]; } } } Image2->Picture->Assign(BMP2); } suzuki001
------
suzuki001
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-05 21:12:19 IP:140.117.xxx.xxx 未訂閱
請問你這個程式執行以後會出現啥效果呢? 是不是出現如果不是背景的話會出現黑白的圖? //--- int d=abs((int)ptr3[x*3]-(int)ptr1[x*3]);只比較一個色階? //--- ptr2[3*x 2]=ptr1[3*x]; ptr2[3*x 1]=ptr1[3*x]; //都取一個色? ptr2[3*x]=ptr1[3*x]; 小於的話則出現灰階圖? //--- ptr2[3*x 2]=ptr1[3*x 2]; ptr2[3*x 1]=ptr1[3*x 1]; ptr2[3*x]=ptr1[3*x]; 改這樣不知道會如何?
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-05 21:23:02 IP:211.74.xxx.xxx 未訂閱
1.參照前人的程式,跑不出來??? 2.其實我是由web cam 抓240*320做比較,但前景減背景,減不出來,看似簡單 就是跑不出來 3.我只是ptr[3*x]-->R//因為我己經灰階做處理,所以ptr[3*x]=ptr[3*x 1]=ptr[3*x 2] suzuki001
------
suzuki001
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-05 21:29:27 IP:140.117.xxx.xxx 未訂閱
可以請你附上圖片嗎??     還有跑不出來是指??
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-05 22:56:51 IP:211.74.xxx.xxx 未訂閱
1.附上圖: 2.前景Ok,背景ok,但相減即不ok suzuki001
------
suzuki001
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-05 23:21:12 IP:203.70.xxx.xxx 未訂閱
是怎樣跑不出來 怎樣不ok 沒看到你有上傳圖?? 請你上傳一下 我這邊有程式可幫你測試 另外怎樣的不ok情形看你是否可以po圖    ps.放上我的程式結果給你看看,不過我都直接相減,沒有做門檻值判斷     發表人 - m58610 於 2005/06/05 23:27:44
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-05 23:29:35 IP:211.74.xxx.xxx 未訂閱
引言: 是怎樣跑不出來 怎樣不ok 沒看到你有上傳圖?? 請你上傳一下 我這邊有程式可幫你測試 另外怎樣的不ok情形看你是否可以po圖
suzuki001
------
suzuki001
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-05 23:33:38 IP:203.70.xxx.xxx 未訂閱
圖片一樣沒看到... xx包子 另外你的程式中,可能有一些東西要修改看看 比如說BMP2沒有給預設長寬,這方面我也沒給 不過我都會用BMP2->Assign(ForeGroundBitmap) 這樣就不用設定一些參數了... 發表人 - m58610 於 2005/06/05 23:37:33
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-05 23:37:52 IP:211.74.xxx.xxx 未訂閱
[quote] 是怎樣跑不出來 怎樣不ok 沒看到你有上傳圖?? 請你上傳一下 我這邊有程式可幫你測試 另外怎樣的不ok情形看你是否可以po圖     1.依前人討論,自己試著寫看不出程式有何問題? 2.將前景(ptr3,Image3)減去背景(ptr1,Image1)放在(ptr2,Image2) 3.困擾...傷腦筋己有一些時間了 suzuki001
------
suzuki001
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-05 23:59:36 IP:218.19.xxx.xxx 未訂閱
suzuki001 您好:    您無需困擾,也無需傷腦筋,君不見已經有許多熱心的先進們在幫忙了嗎?相信能很快就獲得解決的,不過關鍵還得看您是否能提供進一步的詳細資訊,這樣大家才能使得上勁來幫忙。    您上傳的檔案好像是 .PPT 的格式,請改用 .GIF 或是 .JPG 格式的圖檔重新上傳,這樣子才能讓其他人順利看到圖檔的內容。
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-06 00:03:01 IP:211.74.xxx.xxx 未訂閱
引言: [quote] 是怎樣跑不出來 怎樣不ok 沒看到你有上傳圖?? 請你上傳一下 我這邊有程式可幫你測試 另外怎樣的不ok情形看你是否可以po圖 1.依前人討論,自己試著寫看不出程式有何問題? 2.將前景(ptr3,Image3)減去背景(ptr1,Image1)放在(ptr2,Image2) 3.困擾...傷腦筋己有一些時間了 suzuki001
suzuki001
------
suzuki001
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-06 00:16:51 IP:211.74.xxx.xxx 未訂閱
不好意思,我的問題為 1.前景(Image3)減背景(Image1),將ptr2的值回存至Image2 2.我曾試可相減,但影像無法獨立出來??? 3.原始的影像為RGB,經灰階(ptr[3*x]=ptr[3*x 1]=ptr[3*x 2]=( ptr[3*x] ptr[3*x 1] ptr[3*x 2])/3,後才相減 4.只利用ptr[3*x]去判斷再回存至ptr2[3*x 1]及ptr2[3*x 2] 不知會不會不清楚呢? 感恩!!!! suzuki001
------
suzuki001
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-06 00:39:16 IP:218.19.xxx.xxx 未訂閱
suzuki001 您好:    您貼的圖是 Design mode 的,對問題的瞭解似乎幫助不大,建議您將執行程式時有顯示出與提問有關的畫面貼上來。
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-06 02:03:06 IP:140.117.xxx.xxx 未訂閱
hihi suzuki001您好 關於你的程式我試了一下,發現並沒有問題, 但這是我做單張的結果, 看你的程式好像是要在攝影機底下連續去背的動作? 由於連續的抓圖會使的每張圖都不依樣,攝影機所引起的(光源啦有的沒的) 所以才會照成你所感覺得沒有效果吧? 我的猜測^^"
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-08 08:51:50 IP:140.118.xxx.xxx 未訂閱
suzuki001你好 你的程式最大的問題就是Timer跟Button5裡面的一些程式碼會互相干擾.. 我測試過後是ForeGroundBitmap出現問題.. //ForeGroundBitmap=Image3->Picture->Bitmap; 這行會跟Timer裡的Form1->Image3->Picture->Assign(ForeGroundBitmap);衝到 所以我將它MARK起來.... //Image2->Picture->Assign(BMP2); 這行也是一樣會跟上面的BMP2=Image2->Picture->Bitmap;衝到 也不需要這樣寫... 再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)... 上面這些問題其實多試試看可以解決..有問題再繼續討論摟
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-06-08 23:29:53 IP:211.74.xxx.xxx 未訂閱
引言: suzuki001你好 你的程式最大的問題就是Timer跟Button5裡面的一些程式碼會互相干擾.. 我測試過後是ForeGroundBitmap出現問題.. //ForeGroundBitmap=Image3->Picture->Bitmap; 這行會跟Timer裡的Form1->Image3->Picture->Assign(ForeGroundBitmap);衝到 所以我將它MARK起來.... //Image2->Picture->Assign(BMP2); 這行也是一樣會跟上面的BMP2=Image2->Picture->Bitmap;衝到 也不需要這樣寫... 再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)... 上面這些問題其實多試試看可以解決..有問題再繼續討論摟
m58610您好: 我修改程式還會發生scanline index out of range?? 為什麼?? suzuki001
------
suzuki001
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-06-09 13:16:58 IP:140.118.xxx.xxx 未訂閱
引言: m58610您好: 我修改程式還會發生scanline index out of range?? 為什麼?? suzuki001
再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)...
suzuki001
一般會員


發表:15
回覆:8
積分:4
註冊:2005-06-05

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-06-12 20:52:14 IP:211.74.xxx.xxx 未訂閱
引言:
引言: m58610您好: 我修改程式還會發生scanline index out of range?? 為什麼?? suzuki001
再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)... m58610您好: 您能幫看一下,為什麼還不行呢? void __fastcall TForm1::Button5Click(TObject *Sender) { capSetCallbackOnFrame (hCapWnd, &FrameCallBack); Byte *ptr1,*ptr2,*ptr3 ; ForeGroundBitmap=Image2->Picture->Bitmap; BackGroundBitmap=Image1->Picture->Bitmap; BMP3=Image3->Picture->Bitmap; ForeGroundBitmap->Height=Image2->Height; ForeGroundBitmap->Width=Image2->Width; ForeGroundBitmap->PixelFormat=pf24bit; BackGroundBitmap->Height=Image1->Height; BackGroundBitmap->Width=Image1->Width; BackGroundBitmap->PixelFormat=pf24bit; BMP3->Height=Image3->Height; BMP3->Width=Image3->Width; BMP3->PixelFormat=pf24bit; for (int y=0;yHeight;y ) { ptr2=(Byte*)ForeGroundBitmap->ScanLine[y]; ptr1=(Byte*)BackGroundBitmap->ScanLine[y]; ptr3=(Byte*)BMP3->ScanLine[y]; for (int x=0;xWidth;x ) { int gray1=ptr1[x*3 2]*0.299 ptr1[x*3 1]*0.587 ptr1[x*3]*0.114; int gray2=ptr2[x*3 2]*0.299 ptr2[x*3 1]*0.587 ptr2[x*3]*0.114; int d=abs(gray1-gray2); if(d>Threshold) { ptr3[3*x]=0; ptr3[3*x 1]=0; ptr3[3*x 2]=0; } else { ptr3[3*x 2]=ptr2[3*x 2]; ptr3[3*x 1]=ptr2[3*x 1]; ptr3[3*x]=ptr2[3*x]; } } } Image3->Picture->Bitmap->Assign(BMP3); }
suzuki001
------
suzuki001
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-06-13 01:53:44 IP:140.118.xxx.xxx 未訂閱
你好.. 下面是修改你的0606程式的程式碼 沒有用你新的程式碼是因為有些東西你定義的不一樣 還有我也不清楚你有沒有修改Timer裡的東西 因為你新的程式碼有很多行會跟Timer衝到 不知道你對你程式中的每一行是不是都了解他的意思??     
void __fastcall TForm1::Button5Click(TObject *Sender)
{
BMP2->PixelFormat=pf24bit;
capSetCallbackOnFrame (hCapWnd, &FrameCallBack);
Byte *ptr1, *ptr2,*ptr3 = NULL;
BackGroundBitmap=Image1->Picture->Bitmap;
BMP2=Image2->Picture->Bitmap;
BMP2->Assign(BackGroundBitmap);
 for (int y=0;yHeight;y  )
 {
  ptr3=(Byte*)ForeGroundBitmap->ScanLine[y];
  ptr1=(Byte*)BackGroundBitmap->ScanLine[y];
  ptr2=(Byte*)BMP2->ScanLine[y];
   for (int x=0;xWidth;x  )
  {
    int d=abs((int)ptr3[x*3]-(int)ptr1[x*3]);
    if(d>Threshold)
    {
    ptr2[3*x]=0;
    ptr2[3*x 1]=0;
    ptr2[3*x 2]=0;
    ;
    }
    else
    {
    ptr2[3*x 2]=ptr1[3*x];
    ptr2[3*x 1]=ptr1[3*x];
    ptr2[3*x]=ptr1[3*x];
    }
  }
 }    }
 
發表人 - m58610 於 2005/06/13 01:56:49
系統時間:2024-05-19 10:15:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!