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

處理連續影像差異比對的問題

尚未結案
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-20 22:11:07 IP:218.175.xxx.xxx 未訂閱
請問各位大大: 我現在想對連續影像以一秒鐘抓一個frame來處理~來跟上一次抓到的影像做差異比對 然後下一次抓到的影像在跟這一次抓到的做差異比對~如此一直下去 而現在小弟我的問題是在~請問我該怎麼暫時的放這些資料呢~ 要先將資料放在那~才能讓我處理差異比對呢~要先如果做才能讓我繼續來處理這些比對 希望各位大大能幫幫我
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-21 09:58:36 IP:210.68.xxx.xxx 未訂閱
您好:  
引言: 請問我該怎麼暫時的放這些資料呢~ 要先將資料放在那~才能讓我處理差異比對呢~
利用Graphics::TBitmap就可以暫存這些資料了 順心
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-21 21:01:39 IP:220.133.xxx.xxx 未訂閱
taishyang你好~ 因為我是用timer設一秒起動一次並抓一個frame進來 我是想請問~ 如果現在進來的是第一個影像先放到一個current陣列 然後再來第二張影像進來十時~我就把current陣列的影像放到previous陣列 然後第二張的影像放到current陣列 我想請問說我該如何來判斷現在要將current陣列的影像放到previous陣列 然後第二張的影像放到current陣列 還是現在是要將第一個影像先放到一個current陣列 如此一直下去~~~~
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-21 22:38:59 IP:221.169.xxx.xxx 未訂閱
比較簡單的方法是設定一個變數(旗標)為false 當抓完一筆資料的同時,判斷旗標值 若為false,則代表是第一次抓,然後設定為true 繼續抓下筆資料...
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-22 07:27:01 IP:203.67.xxx.xxx 未訂閱
可以考慮用TList記錄每一張圖的Raw data。 就是把Buffer's Pointer放到TList結構中暫存。 然後另一個程序固定比對指標組的前二個TList.Items[0] & TList.Items[1] 比對完, 就能把[0]給Free掉, 以TList的特性, 就會自動把[2]變成[1], [1]變成[0]...比陣列好處理多了。 希望對你的需求有幫助。
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-27 17:51:28 IP:218.175.xxx.xxx 未訂閱
嗯~我現在是使用以下的方法 
     void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
 if(flag==0)
 {
  memcpy(nowBuffer ,im1.ImGrayBuf ,ImageWidth*ImageHeight);
  flag=1;
 }
 else
 {
  memcpy(beforeBuffer ,nowBuffer ,ImageWidth*ImageHeight);
  memcpy(nowBuffer ,im1.ImGrayBuf ,ImageWidth*ImageHeight);
 }
}
而以下這個部份我是宣告成全域變數~因為我是用timer一秒觸動一次~所以不宣告成全域的話資料就會不見~請問這個方法正確嗎~~~~這個方法好嗎~ int flag=0; unsigned char *nowBuffer=new unsigned char[ImageWidth*ImageHeight]; unsigned char *beforeBuffer=new unsigned char[ImageWidth*ImageHeight];
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-28 00:18:02 IP:220.133.xxx.xxx 未訂閱
我現在將code改成這樣~但是確發現整個都是黑的只有隱約看的到背景 我想請問大大這到底是那裡錯了呢~ 請你們幫我看一下~以下是我在timer裡的ccode~它是在做這一秒跟上一秒的差異比對  
    void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
 capSetCallbackOnFrame (hCapWnd, &FrameCallBack); //呼叫api來取得目前影像
 im1.GradMake(CcdBuffer);  //將所取得之目前影像畫面CcdBuffer傳與grandmake進行處理(這個是一個貼圖的class用來將圖貼到image上)
 if(flag==0)
 {
  memcpy(nowBuffer ,im1.ImGrayBuf ,ImageWidth*ImageHeight);
  flag=1;
 }
 else
 {
  memcpy(beforeBuffer ,nowBuffer ,ImageWidth*ImageHeight);
  memcpy(nowBuffer ,im1.ImGrayBuf ,ImageWidth*ImageHeight);
 }
 for (int i=0;i40)
         {
          nowBuffer[i*ImageWidth j]=0;
         }
         else
         {
          nowBuffer[i*ImageWidth j]=nowBuffer[i*ImageWidth j];
         }
       }
   }
  PasteIm k2;
  memcpy(k2.ImPasteBuf ,nowBuffer ,ImageWidth*ImageHeight);
  k2.PasteMake(Image1) ;
}
 
系統時間:2024-07-02 5:30:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!