影像相減的時間問題? |
尚未結案
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
arnotsay您好:
我想您是利用http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26588的方式吧,用Canvas->Pixels也是掃描像素,但卻是一次一點像素
而Sacnline卻是一次一行(列)的像素,處理的時間一定會大大的降低的
您可以利用
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我將兩張影像的每一個像素做相減.. 兩張影像都是320X240....相減完成需要1秒鐘的時間.. 但是我學長用vc寫的...相減只要0.1秒.. 有人知道為什麼會差這麼多嗎??? 還是我計算時間的方法有問題? 我的電腦是duron 800...256 m ram arnotsay 你好: (1)你猜的沒有錯,真的會差這麼多,只要你使用 BCB 的方式來做的話,一定 要花那麼多時間的(不是時間計算的問題) (2)如果你的程式很注重 performance 的話,那就要用 Win32 的方式來做了, 首先,先要了解 BITMAPFILEHEADER, BITMAPINFO, BITMAPINFOHEADER 這幾 個 struct 的資料結構 (3)等到你了解 Bitmap file 的資料結構以後,你就可以直接使用 access 記 憶體的方式,對兩個 bitmap 做相減的動作,根據我的經驗,保證可以快很 多很多 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: arnotsay您好: 我想您是利用http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26588的方式吧,用Canvas->Pixels也是掃描像素,但卻是一次一點像素 而Sacnline卻是一次一行(列)的像素,處理的時間一定會大大的降低的 您可以利用>>< face="Verdana, Arial, Helvetica"> 我用scanline寫了相減的程式..不過結果有問題..你可以幫我看看嗎? 其中image1和image2是載入兩個8bit gray的圖 image3是要將結果show出來.... Graphics::TBitmap *OneBitmap=new Graphics::TBitmap; Graphics::TBitmap *TwoBitmap=new Graphics::TBitmap; Graphics::TBitmap *ThreeBitmap=new Graphics::TBitmap; int Width,Height; Byte *ptr1,*ptr2,*ptr3; OneBitmap= Image1->Picture->Bitmap; OneBitmap->PixelFormat=pf8bit; TwoBitmap= Image2->Picture->Bitmap; TwoBitmap->PixelFormat=pf8bit; ThreeBitmap= Image3->Picture->Bitmap; ThreeBitmap->PixelFormat=pf8bit; ThreeBitmap->Assign(OneBitmap); Width=OneBitmap->Width; Height=OneBitmap->Height; for(int y=0; y |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: arnotsay您好: 重點是下面的Code,剩下的就交給您去修改囉 >>< face="Verdana, Arial, Helvetica"> 你好... 我修改後執行會出現 scan line index out of range...就當了 Graphics::TBitmap *pBitmap=new Graphics::TBitmap; Graphics::TBitmap *pBitmap1=new Graphics::TBitmap; Graphics::TBitmap *pBitmap2=new Graphics::TBitmap; int Width,Height,b1,g1,r1,b2,g2,r2,x,y,show1,show2,show3; Byte *ptr1,*ptr2,*ptr3; pBitmap= Image1->Picture->Bitmap; pBitmap1= Image2->Picture->Bitmap; for ( y = 0; y < pBitmap->Height; y ) { ptr1 = (Byte *)pBitmap->ScanLine[y]; ptr2 = (Byte *)pBitmap1->ScanLine[y]; ptr3 = (Byte *)pBitmap2->ScanLine[y]; for ( x = 0; x < pBitmap->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; Image3->Canvas->Draw(0,0,pBitmap2); } } |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言:引言: arnotsay您好: 重點是下面的Code,剩下的就交給您去修改囉 >>< face="Verdana, Arial, Helvetica"> 你好... 我修改後執行會出現 scan line index out of range...就當了使用 ScanLine 最最需要小心的就是 Bitmap 的 PixelFormat 了,因為它影響 Scanline 的真正的大小! index out of range 表示 scanline 沒有那麼大,而你卻要求那麼大。 建議你,將 scanline 的每一個值先 dump 出來看一下,你可以了解 scanline 的真正內容。當然,你要先準備一張色階或灰階已知的圖給它。最好可以改變一下螢幕的 color bits 數及 Bitmap 的 PixelFormat 看看有何不同,這樣您就可以完全操控 scanline 了。 在 taishyang 的 code 中並沒有指定 PixelFormat 而按其加入了 RGB 轉灰階,表示要處理的是彩色影像。如果您要處理的是256灰階影像,則應該像你自己貼上來的指定 pf8bit,則 scanline 的每一個值就是一個像素的值可以直接加減運算不必轉換。 以前我在處理時,對於灰階(影像處理作業大部分用灰階)影像會先給定一個 256 灰階的調色盤給 Bitmap 物件,再進行處理,會使得顯示 bitmap 圖較為正確喔。提供參考。 沒空更新的網頁... http://coolsite.to/dllee C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: dllee您好: 謝謝您詳盡的補充,讓我又學到了寶貴經驗 順心 >>< face="Verdana, Arial, Helvetica"> 交流交流... 以前我也不會用 scanline (例如在我網頁中的影像處理作業集處理 256x256 像素真的是不快因為用 pixels[][]),後來開始使用時,也發生過一堆問題,但我比較喜歡將 raw data log 出來看看,有時可以得到線上說明或是書上都不會提到的東西喔。 對了,還來不及恭喜您呢!版主! 沒空更新的網頁... http://coolsite.to/dllee C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: arnotsay您好: 試試將Image3->Canvas->Draw(0,0,pBitmap2); 改成Image3->Picture->Assign(pBitmap1); 並去掉Graphics::TBitmap *pBitmap2=new Graphics::TBitmap; 再做一些修改即可 順心 >>< face="Verdana, Arial, Helvetica"> 你好... 我只改這兩行來做測試....先不管結果對不對... 執行的時間scanline跟pixel 不分上下... 沒有比較快...請問是什麼地方出問題呢? |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |