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

如何利用MATROX與BCB做結合擷取影像

尚未結案
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-16 14:22:00 IP:163.18.xxx.xxx 未訂閱
我有到我購買擷取卡的公司看如何使用MATROX與BCB做結合 1.安裝C Builder以及MIL/MIL-Lite。 2.在MS-DOS模式,進入Matrox Imaging\Mil\Library\Winnt\Msc\Dll目錄,使用Implib.exe重建所有的〝.lib〞檔。例如:Implib-c Mil.lib Mil.dll,其餘依次類推。 3.在程式的Project檔中,加入所使用的library。例如。Uselib〝Mil.lib〞。 4.Project的路徑應加上Matrox Imaging\Mil\Library\Winnt\Msc\Dll。 5.在C Builder的Include路徑中,應加上Matrox Imaging\Mil\Include;而Library的路徑則應加上Matrox Imaging\Mil\Library\Winnt\Msc\Dll。 我有按照他的步驟做,但是我有一點第四項說的那個要加在哪裡呢?不知道是否有人有這樣的經驗,謝謝!!
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-16 21:24:27 IP:163.18.xxx.xxx 未訂閱
您好: 因為我也是這樣作法 但是我始終沒有辦法看到影像,所以我也覺得怪怪的 我能把我的問題跟您說嗎?
fnk
高階會員


發表:40
回覆:149
積分:102
註冊:2004-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-16 22:06:27 IP:140.124.xxx.xxx 未訂閱
Include 路徑 加上Matrox Imaging\Mil\Include Library 路徑 加上Matrox Imaging\Mil\Library\Winnt\Msc\Dll 這些設定可以在BCB的 Project->Options->Directories/Conditionals 下的 Directories 找到 Include Path, 和 Library Path..應該是你要的.. =========== 有興趣,就能進步 ===========
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-16 22:36:21 IP:163.18.xxx.xxx 未訂閱
Hello fnk: 因為這個方法我有嘗試過,但是還是沒有辦法擷取到影像,我的方法是依照我上述所寫的步驟下去執行的,不知道我哪裡出了問題呢? 不知道是不是我安裝的步驟有問題嗎?還是連結上面的問題呢? 不知道你所說的步驟是不是跟我上述所說的步驟是一樣的呢?
fnk
高階會員


發表:40
回覆:149
積分:102
註冊:2004-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-16 22:47:36 IP:140.124.xxx.xxx 未訂閱
可以附上你的程式嗎.. 另外...你在complier和link的過程中... 有沒有出現錯誤呢???    還有...這裡有一篇參考資料... http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51059 =========== 有興趣,就能進步 ===========
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-17 16:55:49 IP:163.18.xxx.xxx 未訂閱
Hello fnk: 你所要的程式碼,是不是我擷取影像的程式呢? 還有我LINK與COMPILER的過程都是無誤的。 可以執行執行檔,但是無法看到影像。  
 
#include #pragma hdrstop #include "Rec.h" //--------------------------------------------------------------------------- #pragma package(smart_init) TRec *Rec; //--------------------------------------------------------------------------- Byte *FrameBuf; DWORD *BufUsed; int FrameSize; bool DelayFlag,SaveFlag,Ready; int FrameCount,DelayCount; int TriggerLevel,Ahead,Behind; LRESULT CALLBACK capWaveStreamCallback(HWND hWnd,LPWAVEHDR lpWHdr); LRESULT CALLBACK capVideoStreamCallback(HWND hWnd,LPVIDEOHDR lpVHdr); LRESULT CALLBACK capYieldCallback(HWND hWnd); //--------------------------------------------------------------------------- __fastcall TRec::TRec(HWND HWnd) { Handle=HWnd; Live=false; } __fastcall TRec::~TRec() { // AVIFileExit(); } void __fastcall TRec::SetVideoFormat(void) { //設定影像格式 ----現在不用 CAPTUREPARMS Capture; capCaptureGetSetup(Video,&Capture,sizeof(CAPTUREPARMS)); Capture.fAbortRightMouse=false; Capture.fAbortLeftMouse=false; //Capture.fAbortLeftMouse=true; // Capture.fCaptureAudio=true; //Enable Audio Capture.dwRequestMicroSecPerFrame = 33334; //30 frame Per Sec Capture.dwAudioBufferSize = 356; //900301 capCaptureSetSetup(Video,&Capture,sizeof(CAPTUREPARMS)); } void __fastcall TRec::ShowLive(void) { if(!Live) { Video = capCreateCaptureWindow("Capture Window", WS_CHILD|WS_VISIBLE, 0,0,640,480, this->Handle, 0); //1 capDriverConnect(Video,0); if(!capOverlay(Video,true)) { // capPreviewRate(Video, 100); PreviewMode!! capPreview(Video,true); } UpdateWindow(Video); Live = true; SetVideoFormat(); } } void __fastcall TRec::StopShowLive(void) { if(Live) { capDriverDisconnect(Video); DestroyWindow(Video); Live = false; Video = NULL; //900426 } } void __fastcall TRec::Record() { if(capSetCallbackOnYield(Video,capYieldCallback)) { //can handel Message while record capCaptureSequenceNoFile(Video); //Capture } } void __fastcall TRec::StopRecord() { capCaptureStop(Video); } void __fastcall TRec::Stop() { capCaptureStop(Video); capCaptureAbort(Video); } bool __fastcall TRec::Overlay(bool Flag) { capOverlay(Video,!Flag); if(!capOverlay(Video,Flag)) capPreview(Video,Flag); } bool __fastcall TRec::DlgVideoFormat(void) { return capDlgVideoFormat(Video); } bool __fastcall TRec::DlgVideoSource(void) { return capDlgVideoSource(Video); } bool __fastcall TRec::DlgVideoDisplay(void) { return capDlgVideoDisplay(Video); } HWND __fastcall TRec::test() { return(Handle); } //****************YieldCallback****************************** LRESULT CALLBACK capYieldCallback(HWND hWnd) {//can handel Message while record //////////////////////////////////////////////////////////////////////// // hWnd: Application main window handle //////////////////////////////////////////////////////////////////////// MSG msg; if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } // Return TRUE to continue capturing return (LRESULT) TRUE; }
taishyang
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-17 17:06:38 IP:210.68.xxx.xxx 未訂閱
HI barryHsu:    程式麻煩請縮排,已經提醒您蠻多次了,縮排方式在版規裡有說明    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47262
fnk
高階會員


發表:40
回覆:149
積分:102
註冊:2004-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-18 13:16:07 IP:140.124.xxx.xxx 未訂閱
Hi barryHsu: Matrox是不支援VFW的... 所以..你不能利用VFW API來寫它的影像擷取程式... 一定要用MIL/MIL-Lite來進行影像擷取... 附上我的程式..(是參考自MIL的範例)...    
[visual.h]        #include "mil.h"    /* Hook data structure. */
typedef volatile struct
   {
   MIL_ID  *MilImage; 
   MIL_ID  MilDigitizer;  
   MIL_ID  GrabEndEvent;
   long    NbGrabStart;
   long    NbGrabEnd;
   double  Time;
   } UserDataStruct;    void Initial_MIL(void);
void Free_MIL(void);
long MFTYPE FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr);        [visual.c]        #include "visual.h"    MIL_ID milapp,milsys1,mildisp1,mildig1,milbuf1,milgra1;    unsigned char buf1[480][640];
UserDataStruct UserStruct;    void Initial_MIL(void)
  {
  long BufSizeX1,BufSizeY1;
    
  /* Allocate a MIL application. */
  MappAlloc(M_DEFAULT,&milapp);
  
  /* Allocate a MIL system. */
  MsysAlloc(M_SYSTEM_METEOR_II,M_DEV0,M_DEFAULT,&milsys1);      /* Allocate a MIL display. */
  MdispAlloc(milsys1, M_DEFAULT, M_DEF_DISPLAY_FORMAT, M_DEFAULT, &mildisp1);
  
  /* Allocate a MIL digitizer if supported and sets the target image size. */
  MdigAlloc(milsys1, M_DEFAULT, M_DEF_DIGITIZER_FORMAT, M_DEFAULT, &mildig1);
  MdigInquire(mildig1, M_SIZE_X,  &BufSizeX1);
  MdigInquire(mildig1, M_SIZE_Y,  &BufSizeY1);
  
  /* Allocate a MIL buffer. */
  MbufAlloc2d(milsys1,BufSizeX1,BufSizeY1,8 M_UNSIGNED,M_IMAGE M_DISP M_GRAB M_PROC,&milbuf1); 
  
  /* Clear the buffer */
  MbufClear(milbuf1,0); 
  MdispSelect(mildisp1,milbuf1);
  MgraAlloc(milsys1,&milgra1);
      
  /* Hook function */
  MdigHookFunction(mildig1,M_GRAB_FRAME_END,FrameOneGrabEnd,(void *)(&UserStruct));      MdigGrabContinuous(mildig1, milbuf1);
  }    void Free_MIL(void)
  {
  MdigHookFunction(mildig1, M_GRAB_FRAME_END M_UNHOOK, FrameOneGrabEnd, (void *)(&UserStruct));
  MdigHalt(mildig1);
  MdigGrabWait(mildig1, M_GRAB_END);
  MgraFree(milgra1);
  MbufFree(milbuf1);
  MdispFree(mildisp1);
  MdigFree(mildig1);
  MsysFree(milsys1);
  
  MappFree(milapp);
  }    long MFTYPE FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr)
  {
  MbufGet2d(milbuf1,0L,0L,640L,480L,buf1);  /* but original image into buffer */
  
  return(0);
  }    
使用方式..
(1) 將vision.h和vision.c與BCB放在同一個目錄...
(2) 再用BCB..include vision.h...
(3) 在Form上面拉一個Button...(開始擷取影像)
    呼叫"Initial_MIL()"這個副函式..
(4) 在Form上面再拉一個Button...(結束擷取影像)
    呼叫"Free_MIL()"這個副函式...
(5) 最後利用Add Project..加入你使用Implib.exe..
    所產生出來的Lib檔...    
希望有幫助..^^ =========== 有興趣,就能進步 ===========
m58610
初階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-22 15:24:32 IP:140.118.xxx.xxx 未訂閱
之前用MIL 4.0時,光碟內都已經有BCB的LIBRARY... 而現在的MIL 7.5好像沒有所以才要做重建.lib的動作... 關於沒有影像的問題不知道是不是因為這行的原因 MdigAlloc(MilSystem,M_DEFAULT,"m2cvm77c.dcf",M_DEFAULT,&MilDigitizer); "m2cvm77c.dcf"是因為我的ccd是JAI的CV-M77所以才用這個檔 如果是一般的RS170或NTSC就直接用"M_RS170","M_NTSC"
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-23 22:16:39 IP:163.18.xxx.xxx 未訂閱
Hello fnk: 我依照您的方法下去執行,但是不可以,因為我在visual.c中無法COMPILER 它顯示出無法找到milblob.h,因為我灌完METREO的時候也沒有看到這個檔案讓它宣告,還有許多的宣告檔也都沒有,所以visual.c無法COMPILER過去。
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-25 00:14:56 IP:61.62.xxx.xxx 未訂閱
Hello  barry,, 請問你有購買MIL影像處理函式庫嗎??? 你找不到milblob.h是正常的啊...那就把他移除無損於取像的功能 基本上fnk大俠的code已經足夠取像讓你做基本處理.. 一試再試.. //--------- 偏聽則誨,兼聽則明 如果那個人是我..那該多好
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-03-25 10:06:30 IP:163.18.xxx.xxx 未訂閱
Hello fnk: 您所指的MIL影像處理函式庫是不是Metrox Imaging Library MIL-Lite 7.5這片光碟呢???
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-03-25 10:37:46 IP:163.18.xxx.xxx 未訂閱
Hello fnk: 我已經試著把不要的物件砍掉,但是出現下列的情形
m58610
初階會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-03-29 00:14:40 IP:140.118.xxx.xxx 未訂閱
barryHsu你好 請問你的MIL版本是多少?? 我們研究室一年前有買MIL Lite 7.5 我用起來一些lib就和以前用的MIL Lite 4.0不一樣 fnk兄之前用的記得好像是6.0左右 所以不知道是不是因為這樣所以lib都不同
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-03-29 03:21:30 IP:163.18.xxx.xxx 未訂閱
hello m58610: 我的mil是7.5版的,這樣的話我可以用fnk所說的那種方法做嘛? 還是另有方法,若有的話請告知,謝謝!!
m58610
初階會員


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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-03-29 05:29:51 IP:140.118.xxx.xxx 未訂閱
能不能用我比較不清楚.. 不過應該都大同小異.. 建議你先單純只先做取像部分.. 然後你可以到泰洛網站(www.nowa.com.tw).. 申請一般會員(免費)... 裡面有一個會員區有一些MIL的程式範例... 我一開始用4.0也是照那上面打... 後來換7.5後利用7.5重建的lib或是4.0的lib... 都可以順利取像並存檔... PS.你一開始發表的那些步驟也都要做歐!!! 發表人 - m58610 於 2005/03/29 05:31:59
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-03-29 12:18:26 IP:163.18.xxx.xxx 未訂閱
Hello m58610: 因為我ㄧ開始使用TV卡取像,但是發現我所需要的解晰度不夠,所以經過同才得知MIL這套軟體,可是我有事過你所說的方法始終無法將影像獲得,我所用的方法也是從泰洛那邊得到的,我在猜想會不會因為我所從建的檔案有問題呢? 你說你有使用過MIL7.5,是否可以跟你要你所重建的檔案呢?不好意思這是冒昧地要求。 PS:第四各步驟你知道要如何使用嗎?
m58610
初階會員


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-03-29 22:01:21 IP:140.118.xxx.xxx 未訂閱
你用哪一張擷取卡阿? 你留e-mail給我吧... 我把lib寄給你... 第四步我沒有作... 灌MIL時有一個Intellicam... 是已經寫好的程式... 用那個可以順利取像嗎?
barryHsu
一般會員


發表:55
回覆:49
積分:20
註冊:2005-01-25

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-03-30 12:34:25 IP:163.18.xxx.xxx 未訂閱
Hello m58610: 我的帳號是u9214809@ccms.nkfust.edu.tw 我想請問妳,你可以附上妳所做的程序嗎? 因為我用我之前的方法不可以用 我的卡號METEOR 2/4 Analog Color/Mono
m58610
初階會員


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

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-03-31 03:22:18 IP:140.118.xxx.xxx 未訂閱
等等馬上寄lib給你測試 至於步驟,我以前用4.0時 1.首先要先安裝MIL程式至電腦上 2.安裝結束後,將安裝目錄中INCLUDE裡所有檔案複製到BCB裡的INCLUDE資料夾中 3.再將安裝目錄中LIBRARY所有檔案複製到BCB的LIB資料夾中 4.啟動BCB後,將先前複製的lib檔加入來源之中。也就是你說的第3點 換成7.5後因為我不知道要重建BCB的lib 所以用VC的lib都不能用,只好用4.0的lib,也可以通用 看到你這篇後 除了第4點外我都照用而已 連之前4.0的複製檔案都沒用到,因為第5點已經取代了上述動作吧
cudi0915
一般會員


發表:0
回覆:1
積分:0
註冊:2005-04-02

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-04-02 07:33:12 IP:219.68.xxx.xxx 未訂閱
各位大大好~ 小弟最近用到Matrox Meter-II 這張擷取卡,使用VC 下去開發程式 現在利用到他的範例程式,但是想把擷取進來的影像存成BMP檔不知道要 怎麼寫.....請知道的大大教導一下小弟....謝謝!!
系統時間:2024-04-26 16:16:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!