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

CCD API 函數使用問題!

答題得分者是:SDL
CMOS
一般會員


發表:1
回覆:7
積分:1
註冊:2002-10-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-23 02:52:33 IP:210.202.xxx.xxx 未訂閱
請教各位一個有關CCD的問題? 如何取得CCD Image不經由 capFileSaveDIB 存至硬碟 再取出處理的方式! capGrabFrameNoStop 是否可直 接讀取使用 方法為何? 我用 GetDC 方式讀取至 IMAGE 元件非常緩慢 不知各 位高手都是如何運作的??
SDL
一般會員


發表:2
回覆:6
積分:6
註冊:2002-10-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-28 15:38:19 IP:210.59.xxx.xxx 未訂閱
前面的connect部分不再敘述 先宣告 LPVIDEOHDR VideoStr; //用一個 button元件內容如下,設定callbackonframe啟動 void __fastcall TForm1::Button5Click(TObject *Sender) { capSetCallbackOnFrame (ghCapWnd, &FrameCallBack); } //建立callbackonframe函式,底下為未經壓縮模式24bit沒有調色盤資料 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) { static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize, byte; Byte *ptr; TMemoryStream *stream = new TMemoryStream; // 取得圖片資料 VideoStr=LPVIDEOHDR(lpvhdr); // 取得CAP訊息 capGetStatus( ghCapWnd, &status, sizeof(status) ) ; // 取得圖片格式容量大小 BIHsize=capGetVideoFormatSize( ghCapWnd ); // 取得圖片格式 代入 bitmapinfohead 內 capGetVideoFormat( ghCapWnd, &BitmapHead, BIHsize); // 設定 BITMAPINFO BitmapInfo.bmiHeader=BitmapHead; // 取得圖檔總容量 stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage; // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfOffBits=sizeof(BitmapFileHead) sizeof(BitmapHead); // 偏移至imagedata大小 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead, sizeof(BitmapFileHead) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); (void*)ptr=stream->Memory; ptr = BitmapFileHead.bfOffBits; Move( VideoStr->lpData, ptr, BitmapHead.biSizeImage); // 存入完成 stream->Position=0; // Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); delete( stream ); capSetCallbackOnFrame (ghCapWnd, NULL); //停止callbackonframe return(0); }
CMOS
一般會員


發表:1
回覆:7
積分:1
註冊:2002-10-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-30 02:29:47 IP:210.202.xxx.xxx 未訂閱
LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) 哇!!!真是高手 又快又方便 可否請教一下這是什麼寫作方法 我沒一個字看得懂也 謝謝你的回應
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-30 13:42:46 IP:140.135.xxx.xxx 未訂閱
不好意思 能不能說的再詳細一點 我按照內容編譯後會有出現下面的錯誤訊息 [C Error] ccdtest.cpp(75): E2451 Undefined symbol 'FrameCallBack' 我之前是用Timer和Image元件配合,但速度並不理想 不好意思麻煩您了
74205
一般會員


發表:8
回覆:16
積分:4
註冊:2002-10-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-31 22:30:16 IP:163.28.xxx.xxx 未訂閱
在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 我改成stream->SaveToFile()去看儲存的圖檔,果然無法顯示 還有我也用timer來控制,速度的確十分不理想 timer的速度好像都被抓取影像拖垮了 高手能指點如何改進嗎? 發表人 - 74205 於 2002/10/31 23:15:09
SDL
一般會員


發表:2
回覆:6
積分:6
註冊:2002-10-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-07 16:03:40 IP:210.59.xxx.xxx 未訂閱
[quote] 不好意思 能不能說的再詳細一點 我按照內容編譯後會有出現下面的錯誤訊息 [C++ Error] ccdtest.cpp(75): E2451 Undefined symbol 'FrameCallBack' 我之前是用Timer和Image元件配合,但速度並不理想 不好意思麻煩您了    你沒宣告你下這行(放在include底下) LRESULT CALLBACK FrameCallBack( HWND, Longint );    在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題    可能是你的stream->size有問題    
SDL
一般會員


發表:2
回覆:6
積分:6
註冊:2002-10-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-07 16:19:43 IP:210.59.xxx.xxx 未訂閱
引言: LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) 哇!!!真是高手 又快又方便 可否請教一下這是什麼寫作方法 我沒一個字看得懂也 謝謝你的回應
capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔
74205
一般會員


發表:8
回覆:16
積分:4
註冊:2002-10-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-13 19:57:52 IP:163.28.xxx.xxx 未訂閱
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 < face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子
CMOS
一般會員


發表:1
回覆:7
積分:1
註冊:2002-10-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-14 01:15:03 IP:210.202.xxx.xxx 未訂閱
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題
好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子 [/quote] 請問你是用哪家的CCD? 我有四個不同廠牌的CCD 其中一款會有這種問題 如果你的CCD DRIVER不能 設定圖像大小與彩度 那可能就是CCD的問題
74205
一般會員


發表:8
回覆:16
積分:4
註冊:2002-10-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-11-20 16:43:56 IP:163.28.xxx.xxx 未訂閱
引言: capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔
我問一個問題 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) lpvhdr這個 是從哪裡傳來數值
browningchi
一般會員


發表:4
回覆:3
積分:1
註冊:2002-11-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-11-28 19:40:07 IP:163.28.xxx.xxx 未訂閱
引言:
引言: capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔
我問一個問題 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) lpvhdr這個 是從哪裡傳來數值 出現錯誤訊息說 [C Error] Unit1.cpp(93): E2031 Cannot cast from 'long (__stdcall * (_closure )(void *,videohdr_tag *))(void *,videohdr_tag *)' to 'void *'
kenano
一般會員


發表:6
回覆:5
積分:2
註冊:2002-11-25

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-26 01:02:39 IP:140.118.xxx.xxx 未訂閱
問一個有點笨的問題 大家在討論的CCD是指web camera? 還是指當監視器使用的那種專用CCD?! 如果是專用型的ccd通常不是要再經過一張影像擷取卡嗎?! 這樣的話,不用經過任何步驟 capDriverConnect (hCapWnd, 0);有辦法連結影像擷取卡的驅動程式嗎?! 我不太懂,請前輩解惑說明一下~
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-26 15:09:27 IP:61.220.xxx.xxx 未訂閱
其實原理都是一樣的 都必須透過廠商所提供的Driver 才可以驅動連線,抓取影像..........
taishyang
站務副站長


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-12-26 15:21:47 IP:140.135.xxx.xxx 未訂閱
Kenano你好: 通常攝影機用的感光元件可分CCD和CMOS sensor 看產品的走向而選擇用哪種.. 像web camera解析度不用太高,用的就是像素較低的感光元件 CCD或CMOS都有人用... 而高解析度(超過640*480)的攝影機或像機用的就是CCD了.. CMOS sensor的解析度大部分都是在VGA大小(640*480) web camera大都是USB介面,監視器材的CCD攝影機都是用影像擷取卡.. 但最後都是連到電腦上...當使用#include < vfw.h > 電腦都會接收到 影像視訊流...所以只要是連到電腦的攝影機都可以用之前所討論的方式 秀出來...
Sticker
一般會員


發表:1
回覆:7
積分:1
註冊:2003-05-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-06 12:23:57 IP:218.16.xxx.xxx 未訂閱
我的Video Format是VGA格式,Image也是VGA大小,但是運行時會齣現以下錯誤,是什么原因引起的。Bitmap Image is not valid. 請高手指點
Sticker
一般會員


發表:1
回覆:7
積分:1
註冊:2003-05-28

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-06 13:31:38 IP:218.16.xxx.xxx 未訂閱
格式必須是RGB24而不能用I420,但用editcopy的方式可以用I420。看暸還是不好。
hinatalin
一般會員


發表:3
回覆:3
積分:1
註冊:2003-05-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-06-10 01:31:05 IP:61.230.xxx.xxx 未訂閱
引言:
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 < face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子
我用savedib()跟sdl大所提的方式一起做,得到了兩張圖檔 發現真的是BitmapFileHead的問題,而且不只是sizeof()有問題 連BitmapFileHead的內容也有問題,如果是整個BitmapFileHead整個輸出的話 會得到42 4D 00 00 XX XX XX XX(00 00後面接的是圖檔大小) 正確是42 4D XX XX XX XX(沒有00 00 而且大小會少2) 我把程式碼改成這樣就正常了: ....(以上略) stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead)-2 BitmapHead.biSizeImage;//減2 // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfReserved1=(WORD)0; BitmapFileHead.bfReserved2=(WORD)0; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead)-2 sizeof(BitmapHead); // 偏移至imagedata大小//減2 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead.bfType, sizeof(BitmapFileHead.bfType) ); stream->WriteBuffer( &BitmapFileHead.bfSize, sizeof(BitmapFileHead.bfSize) ); stream->WriteBuffer( &BitmapFileHead.bfReserved1, sizeof(BitmapFileHead.bfReserved1) ); stream->WriteBuffer( &BitmapFileHead.bfReserved2, sizeof(BitmapFileHead.bfReserved2) ); stream->WriteBuffer( &BitmapFileHead.bfOffBits, sizeof(BitmapFileHead.bfOffBits) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); ....(以下略) 真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22
mkchuang
一般會員


發表:1
回覆:10
積分:7
註冊:2002-12-18

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-06-10 03:05:21 IP:140.112.xxx.xxx 未訂閱
引言:
引言:
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 < face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子
真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22
那是BCB6的問題... 你更新一下BCB6就可以解決了...
hinatalin
一般會員


發表:3
回覆:3
積分:1
註冊:2003-05-15

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-06-10 04:14:20 IP:61.230.xxx.xxx 未訂閱
引言:
引言:
引言:
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 < face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子
真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22
那是BCB6的問題... 你更新一下BCB6就可以解決了...
哈哈,正想上來po,結果被搶先一步了 >o< 沒錯,更新以後就沒問題了 ~~
marky1
一般會員


發表:17
回覆:29
積分:9
註冊:2003-03-19

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-07-03 19:19:41 IP:140.118.xxx.xxx 未訂閱
您好: 小弟使用SDL的方法後,於 capSetCallbackOnFrame(hCapWnd, &FrameCallBack); 這一行出現以下錯誤訊息: [C Error] Unit1.cpp(104): E2031 Cannot cast from 'long (__stdcall * (_closure )(void *,long))(void *,long)' to 'void *' 請問一下: 1. &FrameCallBack的寫法正確嗎?傳入會不會不完整呢? 2. 我不清楚LRESULT CALLBACK FrameCallBack(HWND hwnd, Longint lpvhdr) 中的lpvhdr是什麼?要傳入什麼樣的參數至FrameCallBack? 感激不盡!!
marky1
一般會員


發表:17
回覆:29
積分:9
註冊:2003-03-19

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-07-06 02:13:35 IP:140.118.xxx.xxx 未訂閱
不好意思小弟沒睡飽, SDL的方法沒有問題 不過傳入引數「Longint lpvhdr」小弟還是不清楚,好像是影像資料的位址;不曉得哪一位先進知道哪裡有說明文件可以看 謝謝!
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-12-09 21:03:00 IP:61.221.xxx.xxx 未訂閱
請問要更新到那一版呢?小弟抓了這個bcb6_eng_ent_upd4.exe,應該是 update pack 4,可是裝了還是會出現同樣的問題耶? 另外我用 hinatalin 的方式,因為我把影像抓到 Image 上面看,結果卻是一條一條的, 所以這一行後面加了一個存檔的程式碼,把圖貼上來給大家看一下. Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); Form1->Image1->Picture->SaveToFile("c:\\test.bmp");
JK2050
一般會員


發表:5
回覆:5
積分:2
註冊:2005-03-12

發送簡訊給我
#23 引用回覆 回覆 發表時間:2005-03-13 05:47:27 IP:218.166.xxx.xxx 未訂閱
各位高手...由於我是新手,所以問一個呆的問題! 就是我想要從即時影像中直接擷取單格畫面!在我 爬玩上面的文章之後,我執行這一行: Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 的時候,卻出現了:Camera.cpp(50):E2451 Undefined symbol'stream' 可以有人告訴我為何? 謝謝各位大大不吝指教~~
dac
一般會員


發表:14
回覆:24
積分:7
註冊:2005-01-06

發送簡訊給我
#24 引用回覆 回覆 發表時間:2005-10-26 00:52:50 IP:220.129.xxx.xxx 未訂閱
不好意思,請問一下要如何做像您這樣的判斷    
引言:
引言:
引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 < face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子
我用savedib()跟sdl大所提的方式一起做,得到了兩張圖檔 發現真的是BitmapFileHead的問題,而且不只是sizeof()有問題 連BitmapFileHead的內容也有問題,如果是整個BitmapFileHead整個輸出的話 會得到42 4D 00 00 XX XX XX XX(00 00後面接的是圖檔大小) 正確是42 4D XX XX XX XX(沒有00 00 而且大小會少2) 我把程式碼改成這樣就正常了: ....(以上略) stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead)-2 BitmapHead.biSizeImage;//減2 // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfReserved1=(WORD)0; BitmapFileHead.bfReserved2=(WORD)0; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead)-2 sizeof(BitmapHead); // 偏移至imagedata大小//減2 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead.bfType, sizeof(BitmapFileHead.bfType) ); stream->WriteBuffer( &BitmapFileHead.bfSize, sizeof(BitmapFileHead.bfSize) ); stream->WriteBuffer( &BitmapFileHead.bfReserved1, sizeof(BitmapFileHead.bfReserved1) ); stream->WriteBuffer( &BitmapFileHead.bfReserved2, sizeof(BitmapFileHead.bfReserved2) ); stream->WriteBuffer( &BitmapFileHead.bfOffBits, sizeof(BitmapFileHead.bfOffBits) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); ....(以下略) 真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22
系統時間:2024-03-29 14:52:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!