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

影像比對問題

尚未結案
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-23 14:41:55 IP:163.28.xxx.xxx 未訂閱
各位先進小弟有一個構想就是建立一個button1然後在這裡執行影像前景的抓取,然後再設一個button擷取影像與前景做比對,請問這段程式我該如何著手呢? 謝謝......................
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-23 15:00:19 IP:140.135.xxx.xxx 未訂閱
newken您好:    
引言:就是建立一個button1然後在這裡執行影像前景的抓取,然後再設一個button擷取影像與前景做比對
Button1存的應該是背景吧?? 這是我的建議您參考看看,當您Button1按一下時,存一張畫面為背景 但若要讓系統Strong的話,要更新背景 用capFileSaveDIB(hCapWnd,bmpfilename.c_str() ); //存成bmp檔 Button2就連續抓影像(配合Timer元件),並與背景做比對 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
kaiti yang
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-24 12:09:33 IP:61.59.xxx.xxx 未訂閱
引言: 建立一個button1然後在這裡執行影像前景的抓取,然後再設一個button擷取影像與前景做比對,請問這段程式我該如何著手呢?
newken您好: 你可以在Form多建一個image的視窗,然後把你處理後的影像貼上此處既可,但缺點畫面會一散一散的啦!範例如下 /*更新畫面*/ Form1->Refresh(); for(j=0;jDesktop2->Canvas ->Handle,i,j,bbuf bbuf*256 bbuf*65536); }
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-25 17:01:15 IP:218.167.xxx.xxx 未訂閱
各位先進: 所謂的比對在我的認知裡是把前景與所擷取的影像做相減的動作,但相減完如何做下一不的動作呢?請給我一些建議吧 謝謝............
taishyang
站務副站長


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-25 17:16:09 IP:140.135.xxx.xxx 未訂閱
newken您好:
引言: 所謂的比對在我的認知裡是把前景與所擷取的影像做相減的動作,但相減完如何做下一不的動作呢?
您可以參考下面聯結的圖示說明 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30457 前景就是現在擷取到的畫面(即物件 背景) 您說的[比對]應該指的就是差量影像吧... 假如您認為的比對是做相減的動作的話.. 那相減完畢後下一步要做什麼也是由您決定囉 相減的方式可以參考下面的連結 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26588">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26588 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
JerryKuo
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-26 10:48:43 IP:61.230.xxx.xxx 未訂閱
newken你好:       請問你要比對什麼? 比對兩個物件是否相似,是顏色相似?還是其他方面的相 似。在顏色相似的方面,又分為像素的差異個數,MAE或MSE MAE:把相減完的像素值,每個像素取絕對值,全部加起來取平均 MSE:把相減完的像素值,每個像素取絕對值平方,全部加起來取平均 值愈小表示兩張圖愈相似,這個兩個方法都是影像處理常用估測方法 到IEEE查mse或mae會有一堆這類的論文。    希望這就是你要的 <>< face="Verdana, Arial, Helvetica">引言: 各位先進: 所謂的比對在我的認知裡是把前景與所擷取的影像做相減的動作,但相減完如何做下一不的動作呢?請給我一些建議吧 謝謝........... < face="Verdana, Arial, Helvetica">
taishyang
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-26 11:47:10 IP:140.135.xxx.xxx 未訂閱
newken您好:  您是要做Motion detection嗎???    ~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-27 11:51:11 IP:163.28.xxx.xxx 未訂閱
各位先進: 小弟想要連續的擷取影像,然後類似第二張與第一張比較;第三張與第二張比較;依此類推,請問我該如何下手呢?< > 謝謝........< >
taishyang
站務副站長


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-27 12:08:45 IP:61.231.xxx.xxx 未訂閱
newken您好:     
引言: 小弟想要連續的擷取影像,然後類似第二張與第一張比較;第三張與第二張比較;依此類推,請問我該如何下手呢?
假如您所說的[比對]指的是相減的話 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26588 將上面連結當中的bmp1與bmp2當作buffer即可 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-27 12:27:30 IP:163.28.xxx.xxx 未訂閱
請問那在讀檔的地方,怎麼分別把第一張與第二張讀取出來(我是把影像save to file)而且影像是即時擷取進來,這個地方該怎麼下手啊
taishyang
站務副站長


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-27 12:38:05 IP:61.231.xxx.xxx 未訂閱
newken您好:    
引言: 怎麼分別把第一張與第二張讀取出來
假設您之前存檔的編號為1.bmp 2.bmp... int i=1; bmp1->LoadFromFile(IntToStr(i) ".bmp"); bmp2->LoadFromFile(IntToStr(i 1)) ".bmp"); 就可以分別將圖檔放到bmp1與bmp2了 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-27 14:27:44 IP:163.28.xxx.xxx 未訂閱
請問怎麼存檔存成1.bmp 2.bmp.......,我之前是存成以下形式 AnsiString szDT = Now().FormatString("yymmddhhnn_ss") ".bmp"; capFileSaveDIB(hWndC,szDT.c_str()); thanks>>>>>>>>>>>>
taishyang
站務副站長


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-27 14:34:41 IP:140.135.xxx.xxx 未訂閱
newken您好: 
引言:請問怎麼存檔存成1.bmp 2.bmp
舉一反三將capFileSaveDIB(hWndC,szDT.c_str()); 改成
 
   int i=1;
   AnsiString FileName=IntToStr(i) ".bmp";
   capFileSaveDIB(hWndC,FileName.c_str());
   i  ;
  
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-27 14:43:06 IP:163.28.xxx.xxx 未訂閱
int i=1; AnsiString FileName="IntToStr(i)" ".bmp"; capFileSaveDIB(hWndC,FileName.c_str()); i ; ------------------------------------------------- taishyang你好: 我成上述形式,結果出現一下錯誤 [C Error] tracking.cpp(95): E2085 Invalid pointer addition
taishyang
站務副站長


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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-27 14:54:00 IP:140.135.xxx.xxx 未訂閱
newken您好:    對不起 改成這樣 AnsiString FileName=IntToStr(i)+".bmp";    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-27 15:03:03 IP:163.28.xxx.xxx 未訂閱
taishyang你好: 我把程式寫成這樣: void __fastcall TForm1::Timer1Timer(TObject *Sender) { capPreview(hWndC,true); capGrabFrameNoStop(hWndC); int i=1; AnsiString szDT=IntToStr(i) ".bmp"; capFileSaveDIB(hWndC,szDT.c_str()); i ; } 但是到DIB去看祇存成一張圖而以,1.bmp之後就沒有了
taishyang
站務副站長


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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-27 15:06:01 IP:140.135.xxx.xxx 未訂閱
newken您好:   將i設成全域變數   或是改成 static int i=1;    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-27 15:41:07 IP:163.28.xxx.xxx 未訂閱
taishyang你好: 已經可以順利存檔了。 但現在我寫了一段程式來做相減,可是出了以下問題,能不能幫我看看: void __fastcall TForm1::Timer2Timer(TObject *Sender) { Byte *ptr1,*ptr2,*ptr3; int x,y,r1,g1,b1,r2,g2,b2,show1,show2,show3; Graphics::TBitmap *bmp1 = new Graphics::TBitmap(); Graphics::TBitmap *bmp2 = new Graphics::TBitmap(); static k=1; bmp1=Image1->Picture->LoadFromFile(IntToStr(k) ".bmp"); bmp2=Image2->Picture->LoadFromFile(IntToStr(k 1) ".bmp"); for ( y = 0; y < bmp1->Height; y ) { ptr1 = (Byte *)bmp1->ScanLine[y]; ptr2 = (Byte *)bmp2->ScanLine[y]; ptr3 = (Byte *)bmp2->ScanLine[y]; for ( x = 0; x < bmp1->Width; x ) { b1=ptr1[x*3]; g1=ptr1[x*3 1]; r1=ptr1[x*3 2]; b2=ptr2[x*3]; g2=ptr2[x*3 1]; r2=ptr2[x*3 2]; show1=(0.299*r1 0.587*g1 0.114*b1); show2=(0.299*r2 0.587*g2 0.114*b2); show3=abs(show1-show2); ptr3[x*3]=(Byte)show3; ptr3[x*3 1]=(Byte)show3; ptr3[x*3 2]=(Byte)show3; Image2->Picture->Assign(bmp2); } } Image2->Picture->Assign(bmp2); delete bmp1; delete bmp2; k ; } 出現了 [C Error] tracking.cpp(140): E2109 Not an allowed type [C Error] tracking.cpp(141): E2109 Not an allowed type 兩個錯誤訊息
taishyang
站務副站長


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

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-27 15:47:44 IP:140.135.xxx.xxx 未訂閱
newken您好:   1. static k=1; 改成static int k=1;   2. 您先不要放在Timer中看看有沒有問題...   3. Image2->Picture->Assign(bmp2);為何會重複2次呢??   4. 貼程式碼時,請選擇格式中的[#]將您的程式碼包起來會比較方便閱讀    p.s: 您必須了解程式的涵義,不然只是copy對您是沒有多大的幫助的< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/05/27 15:51:09
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-27 16:46:05 IP:163.28.xxx.xxx 未訂閱
taishyang你好: 我已經試出來了,但現在有一個問題就是:我是配合timer然後用capFileSaveDIB存到硬碟在讀取出來做處理,但是程式跑了一段時間後,就會在硬碟裡存了一堆影像檔。有沒有辦法就是做完處理後移除影像,不知怎麼寫這段程式,但我又不想使用TMenorystream來寫。 謝謝< >< >
taishyang
站務副站長


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

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-27 16:54:30 IP:140.135.xxx.xxx 未訂閱
newken您好:   您現在的問題已經離題了[影像比對問題]->[移除影像]   建議您可以發問新的問題,並可以多多利用站上的[搜尋]功能   不過我覺得可以不用存那麼多影像,存檔時只要一直覆蓋1.bmp和2.bmp即可   有需要的資訊再存下來會比較好    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-06-23 15:05:40 IP:163.28.xxx.xxx 未訂閱
各位大大: 我參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24194這一篇 用TMemoryStream的方法把影像做處理,但如果我要把前後連續的影像做相減,這樣用TMemoryStream的方法要如何操作呢(例如如何讀出前後的兩張影像) 謝謝..............
系統時間:2024-05-05 20:02:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!