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

請問如何在CCD擷取的畫面中畫線~~

尚未結案
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-27 22:39:44 IP:163.28.xxx.xxx 未訂閱
大家好喔 我現在用
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-05 09:58:28 IP:61.222.xxx.xxx 未訂閱
以圖層的觀念來說的話 Canvas只算單一圖層 所以只要CCD有更新自然就會被覆蓋過去 我提供兩種做法 一在影像蓋過去時 在重新在Canvas上畫線 二另做一個圖層在他之上這時候你要怎麼做便很容易,但是會有一個問題透明怎麼做 這個我目前還不知道 我用的方法是方法一 希望會有高手提供方法二 
taishyang
站務副站長


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-05 14:03:43 IP:140.135.xxx.xxx 未訂閱
mkbobo您好: 能否再解釋一下方法一的做法呢?
JerryKuo
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-05 16:20:57 IP:61.230.xxx.xxx 未訂閱
danielkelly你好:    我不會直接畫在ccd擷取影像上面,但我是先利用FrameCallBack的方法 以33Hz速度得到單張影像,並貼於TImage上,再畫上直線,以下是我的片 段程式碼,參考看看
//33Hz擷取單張影像,並畫上直線;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  capSetCallbackOnFrame(hWndC, &FrameCallBack);
  Image1->Canvas->Pen->Style = psDot;
  Image1->Canvas->Pen->Mode  = pmXor;
  Image1->Canvas->MoveTo((int)Image1->Width/2,0);
  Image1->Canvas->LineTo((int)Image1->Width/2,Image1->Height);;
  Image1->Canvas->MoveTo(0,(int)Image1->Height/2);
  Image1->Canvas->LineTo(Image1->Width,(int)Image1->Height/2);
}    //啟動按鈕;
void __fastcall TForm1::Button8Click(TObject *Sender)
{
   if(Timer1->Enabled)
   {
      Form1->DoubleBuffered = false;
      Timer1->Enabled = false;
      Button8->Caption = "Start Copy";
   }
   else
   {
      Form1->DoubleBuffered = true;
      Timer1->Enabled = true;
      Button8->Caption = "Stop Copy";
   }
}
capSetCallbackOnFrame()是參考之前的文章 http://delphi.ktop.com.tw/topic.php?topic_id=22263 發表人 - jerrykuo 於 2003/12/05 16:25:55
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-05 18:29:06 IP:61.222.xxx.xxx 未訂閱
JerryKuo版主說的是預先處理 就是在影像有的時候它會先呼叫 這個capSetCallbackOnFrame(hWndC, &FrameCallBack); 設定的callback func. FrameCallBack <<--    以下提供你另一種方法你試看看提供你參考 這個是在影像處理完會 呼叫capYieldCallback < class="code"> LRESULT CALLBACK capYieldCallback( HWND hWnd ) { MoveToEx(hWnd,0,0,NULL); LineTo(hWnd,00,10); LineTo(hWnd,10,10); LineTo(hWnd,10,0); LineTo(hWnd,00,0); } void __fastcall TForm1::FormCreate(TObject *Sender) { HWND vfwapi=NULL; vfwapi =capCreateCaptureWindow( "test", WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, Panel1->Handle, 0 ); capSetCallbackOnYield( vfwapi, &capYieldCallback ); }
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-05 18:43:43 IP:140.135.xxx.xxx 未訂閱
mkbobo您好:  謝謝您熱心的分享< >< > 也謝謝JerryKuo版主的幫忙< > > 再次感謝< > 發表人 -
taishyang
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-06 00:01:23 IP:140.135.xxx.xxx 未訂閱
mkbobo您好: 我按照您的程式測試但是FormCreate時並沒有效果,畫面正常但Panel上框框並沒有出現 是不是哪邊疏忽了? < class="code"> //--------------------------------------------------------------------------- LRESULT CALLBACK capYieldCallback( HWND hWnd ) { MoveToEx(hWnd,0,0,NULL); LineTo(hWnd,0,10); LineTo(hWnd,10,10); LineTo(hWnd,10,0); LineTo(hWnd,0,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { vfwapi =capCreateCaptureWindow("test",WS_CHILD | WS_VISIBLE, 0,0,160,120,Panel1->Handle,0); capDriverConnect(vfwapi,2); capPreviewRate(vfwapi,33); capPreview(vfwapi,true); capSetCallbackOnYield(vfwapi,&capYieldCallback); } //--------------------------------------------------------------------------- 順心 發表人 -
MilesWamg
一般會員


發表:18
回覆:37
積分:11
註冊:2003-02-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-06 23:28:09 IP:218.164.xxx.xxx 未訂閱
以圖層的觀念來說的話 Canvas只算單一圖層 所以只要CCD有更新自然就會被覆蓋過去 我提供兩種做法 一在影像蓋過去時 在重新在Canvas上畫線 二另做一個圖層在他之上這時候你要怎麼做便很容易,但是會有一個問題透明怎麼做 這個我目前還不知道 我用的方法是方法一 希望會有高手提供方法二 透明阿 用小畫家劃一張全黑的圖bmp打底(如畫於TPaintBox) 再放於canvas上,很神奇的他是透明的歐 即擷取影像物件上又覆蓋另一個物件 如玻璃一般可以在此(如TPaintBox上作畫)
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-11 22:53:40 IP:140.124.xxx.xxx 未訂閱
請問大大  
 
 capSetCallbackOnYield(
      hCapWnd,
      &capYieldCallback
    );
 
這一行 要如何處理,才不會有錯誤 ?? 定義成函式嗎?
JerryKuo
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-12 14:38:21 IP:61.230.xxx.xxx 未訂閱
毛遂自薦一下,請問我提的方法不合用嗎? 不合用的話,那裡不合用,我再想辦法解決 麻煩試一下,謝謝
taishyang
站務副站長


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-12 16:06:17 IP:140.135.xxx.xxx 未訂閱
JerryKuo版主您好: 
引言: 毛遂自薦一下,請問我提的方法不合用嗎? 不合用的話,那裡不合用,我再想辦法解決
我想danielkelly會員與我的目的需求應該是一樣的... 就是希望能將線條直接顯示在capCreateCaptureWindow所產生的畫面上 而不藉由第二個元件(Image)來顯示< > 請 > 順心< >
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-12 22:48:40 IP:163.28.xxx.xxx 未訂閱
對阿 我的需求就是這樣 想要畫面顯示在Panel上 在顯示的同時 線條也出現  好使在取像的時候 可以對準     謝謝 指教  
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-12-15 14:40:22 IP:218.32.xxx.xxx 未訂閱
影像放在TImage上, 因為不斷的更新畫面, 所以畫框就會被洗掉。 建議你在TImage上加一個TPaintBox, 並將框線畫在TPaintBox上, 這樣會比較明顯, 也比較不容易當掉(例如偵測Motion Detection時需要時常更新畫框顏色, 這個時候, 多channel motion 觸發時容易當掉(<--不明原因))。 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D [url="http://anpino.begin.8d8d.com"]Programmers Guide[/url] 發表人 - anpino 於 2003/12/15 14:41:19
JerryKuo
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-12-16 16:55:21 IP:61.230.xxx.xxx 未訂閱
試了許多方法,但都不能video視窗畫出線,不過小弟有一些心得分享給大家    1.之所以不能畫出線原因,是因為這個視窗是Form的最上層,不管怎麼畫線 都會畫在video視窗的下面,並不是因為畫面不斷更新的原因。試試把video 視窗放在Form上,或是Panel上,video視窗都是在最上方,沒有任何元件會 蓋過它。 2.因此假設要畫出線,必需有函數直接畫線在video視窗上,現在還找不到。 3.我們可以發現:只有新的Form才能蓋過video視窗。那是不是建立一透明的 Form放在video視窗上,在這透明Form上畫線就可以達到我們想要的結果呢? 會不會太異想天開。 給大家參考
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-12-17 18:25:11 IP:61.222.xxx.xxx 未訂閱
有看這個討論串的前輩先進們 在此先說聲抱歉 我上面的回覆是無法正常工作的 本想看個 > 首先 >_<
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-12-18 15:58:14 IP:218.32.xxx.xxx 未訂閱
引言: 有看這個討論串的前輩先進們 在此先說聲抱歉 我上面的回覆是無法正常工作的 本想看個 > 首先 >_< < face="Verdana, Arial, Helvetica"> 我原本的意思是, 使用原本可以正常執行的方法一, 只是多加上一個TPaintBox, 並將框線畫在TPaintBox上,而已。 (當然TPaintBox跟顯示範圍一樣大) 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D [url="http://anpino.begin.8d8d.com"]Programmers Guide[/url] 發表人 - anpino 於 2003/12/18 16:00:58
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-01-04 11:29:15 IP:140.124.xxx.xxx 未訂閱
我要向各位熱心參與討論的人說聲謝謝 雖然沒有滿意的結果 不過也從這裡學了蠻多的~~ 看來直接用
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-01-07 09:21:27 IP:61.66.xxx.xxx 未訂閱
引言: 我要向各位熱心參與討論的人說聲謝謝 雖然沒有滿意的結果 不過也從這裡學了蠻多的~~ 看來直接用>< face="Verdana, Arial, Helvetica"> 請結案吧 (不需給分也可結案。) 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖url="http://anpino.begin.8d8d.com"
系統時間:2024-05-13 0:42:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!