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

SOBEL 用ScrollBar調整的小問題

答題得分者是:六尾犬
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-06 17:20:31 IP:163.23.xxx.xxx 訂閱
各位前輩小弟有個問題!! 就是我在做SOBEL 將灰階後的圖片讀入作SOBEL 用ScrollBar來調整但是怪怪的可以請前輩幫忙一下嗎 這是我參考板上某位大大的作品做修改上傳一下我的檔案

重新上傳我的 sobel_text 檔的程式

<textarea class="c#" rows="10" cols="60" name="code">void __fastcall TForm1::Button1Click(TObject *Sender) { if (Image1->Picture->Bitmap->Empty==true) ShowMessage("請載入圖檔!!"); Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap(); Byte *ptr; Bitmap1->Assign(Image1->Picture->Bitmap ); Bitmap1->PixelFormat = pf24bit;//24bit Bitmap1->LoadFromFile("B.bmp"); int gray; int i,j; int sx = 0; int sy = 0; int **pic = 0; int thresh; thresh = ScrollBar1->Position; Edit1->Text = ScrollBar1->Position; Bitmap1->Assign(Image2->Picture->Bitmap); //這裡 Bitmap1->PixelFormat=pf24bit; pic = new int*[Bitmap1->Height]; for(i = 0; i< Bitmap1->Height; i ) pic[i] = new int[Bitmap1->Width]; Bitmap1->Assign(Image2->Picture->Bitmap); // 這裡 for(j=0; jHeight; j ) { ptr = (Byte *)Bitmap1->ScanLine[j]; for(i=0; iWidth; i ) { gray = (ptr[i*3]*28 ptr[i*3 1]*151 ptr[i*3 2]*77)/256; //二值化 pic[j][i] = ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = (Byte)gray; //二值化 } } for(j=1; jHeight-1; j ) { ptr = (Byte *)Bitmap1->ScanLine[j]; for(i=1; iWidth-1; i ) { // convolution sx = -1*pic[j-1][i-1] pic[j 1][i-1] -2*pic[j-1][i] //SOBEL演算 2*pic[j 1][i] - pic[j-1][i 1] pic[j 1][i 1]; sy = pic[j-1][i-1] 2*pic[j][i-1] pic[j 1][i-1] - 1*pic[j-1][i 1] - 2*pic[j][i 1] - pic[j 1][i 1]; if(sqrt(sx*sx sy*sy)>thresh) { ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = 0; } else ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = 255; } } Image2->Stretch=true; Image2->Height *=1; Image2->Width *=1; Image2->Picture->Assign(Bitmap1); Image2->Picture->SaveToFile("C.bmp"); for (i=0; i< Bitmap1->Height; i ) delete [] pic[i]; delete [] pic; delete Bitmap1; } //--------------------------------------------------------------------------- void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap(); Byte *ptr; int gray; int i,j; int sx = 0; int sy = 0; int **pic = 0; int thresh; thresh = ScrollBar1->Position; Edit1->Text = ScrollBar1->Position; Bitmap1->Assign(Image1->Picture->Bitmap); //這裡 Bitmap1->PixelFormat=pf24bit; pic = new int*[Bitmap1->Height]; for(i = 0; i< Bitmap1->Height; i ) pic[i] = new int[Bitmap1->Width]; Bitmap1->Assign(Image1->Picture->Bitmap); // 這裡 for(j=0; jHeight; j ) { ptr = (Byte *)Bitmap1->ScanLine[j]; for(i=0; iWidth; i ) { gray = (ptr[i*3]*28 ptr[i*3 1]*151 ptr[i*3 2]*77)/256; //二值化 pic[j][i] = ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = (Byte)gray; //二值化 } } for(j=1; jHeight-1; j ) { ptr = (Byte *)Bitmap1->ScanLine[j]; for(i=1; iWidth-1; i ) { // convolution sx = -1*pic[j-1][i-1] pic[j 1][i-1] -2*pic[j-1][i] //SOBEL演算 2*pic[j 1][i] - pic[j-1][i 1] pic[j 1][i 1]; sy = pic[j-1][i-1] 2*pic[j][i-1] pic[j 1][i-1] - 1*pic[j-1][i 1] - 2*pic[j][i 1] - pic[j 1][i 1]; if(sqrt(sx*sx sy*sy)>thresh) { ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = 0; } else ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = 255; } } Image2->Picture->Assign(Bitmap1); for (i=0; i< Bitmap1->Height; i ) delete [] pic[i]; //ScrollBar2->Enabled=true; delete [] pic; delete Bitmap1; } </textarea>
編輯記錄
mp_0223 重新編輯於 2007-05-07 16:42:37, 註解 無‧
mp_0223 重新編輯於 2007-05-07 16:43:34, 註解 無‧
mp_0223 重新編輯於 2007-05-07 16:44:33, 註解 無‧
mp_0223 重新編輯於 2007-05-08 02:27:15, 註解 無‧
mp_0223 重新編輯於 2007-05-08 02:29:42, 註解 無‧
mp_0223 重新編輯於 2007-05-08 02:30:57, 註解 無‧
mp_0223 重新編輯於 2007-05-08 02:31:22, 註解 無‧
mp_0223 重新編輯於 2007-05-08 02:33:55, 註解 無‧
dicky9055
一般會員


發表:20
回覆:48
積分:18
註冊:2006-08-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-06 20:24:27 IP:211.76.xxx.xxx 訂閱
話說這個我也發生過耶..
嘿..也是用這個寫法的..
後來就換參考另一個大大寫的
好像就沒遇到這個問題了
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-07 03:16:31 IP:163.23.xxx.xxx 訂閱
請問是用什麼方法?
可以介紹給小弟嗎!!
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-07 09:39:27 IP:122.124.xxx.xxx 未訂閱
PO程式碼的方式請參考版規說明,煩請修改謝謝配合
六尾犬
一般會員


發表:0
回覆:9
積分:11
註冊:2006-09-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-08 00:18:07 IP:218.172.xxx.xxx 訂閱
ScrollBar1Change的部份怪怪的耶...    當你的ScrollBar1Change時... 讀的圖片是『Image2的圖』???    應該是再重新處理一次圖吧??? 讀Image1才對???    ===================引 用 mp_0223 文 章===================
請問是用什麼方法?
可以介紹給小弟嗎!!
mp_0223
一般會員


發表:16
回覆:32
積分:9
註冊:2006-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-08 02:13:06 IP:163.23.xxx.xxx 訂閱
謝謝講解
但是我的主程式是連慣性的 這個TEXT是我的一小部份
因為我的主程式Image1是1張彩色的圖
並不是灰階後的圖
所以不知道要怎麼改 可以教一下嗎
六尾犬
一般會員


發表:0
回覆:9
積分:11
註冊:2006-09-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-08 12:32:29 IP:218.172.xxx.xxx 訂閱
你po上來的程式碼跟你上傳的程式碼內容『有差異』是也...

Bitmap1->Assign(Image1->Picture->Bitmap); //這裡
ScrollBar1Change的兩個改成上述...

應該就沒問題了?


===================引 用 mp_0223 文 章===================
謝謝講解
但是我的主程式是連慣性的? 這個TEXT是我的一小部份
因為我的主程式Image1是1張彩色的圖?
並不是灰階後的圖
所以不知道要怎麼改? 可以教一下嗎
dicky9055
一般會員


發表:20
回覆:48
積分:18
註冊:2006-08-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-09 17:32:33 IP:211.76.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=88317
===================引 用 mp_0223 文 章===================
請問是用什麼方法?
可以介紹給小弟嗎!!
系統時間:2024-05-02 23:33:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!