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

如何將圖片中各Pixel的RGB取出…

答題得分者是:cmf
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-30 16:59:27 IP:163.28.xxx.xxx 未訂閱
各位大大你好: 如何用BCB將圖片中各Pixel的RGB取出作統計並繪圖,作二值化 再作Scorllbar對應改變圖片中的亮度。 新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-30 17:07:55 IP:61.218.xxx.xxx 未訂閱
引言: 各位大大你好: 如何用BCB將圖片中各Pixel的RGB取出作統計並繪圖,作二值化 再作Scorllbar對應改變圖片中的亮度。 新手上路,希望高手解答,感激不盡。
請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923
------
︿︿
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-30 17:17:30 IP:163.28.xxx.xxx 未訂閱
[/quote]    請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢?   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923 站長 領航天使 是用BCB寫的嗎 ??? 新手上路,希望高手解答,感激不盡。 [/quote]
------
新手上路,希望高手解答,感激不盡。
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-30 17:22:44 IP:61.218.xxx.xxx 未訂閱
引言: 請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923 站長 領航天使 是用BCB寫的嗎 ??? 新手上路,希望高手解答,感激不盡。
舉一反三 DELPHI 轉成 BCB 就好了
------
︿︿
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-30 17:41:34 IP:163.28.xxx.xxx 未訂閱
[/quote] 舉一反三 DELPHI 轉成 BCB 就好了 [/quote] 請問:DELPHI 如何轉成 BCB ,而它們之間又有什麼關係呢??? 謝謝熱心的人! 新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-30 17:45:49 IP:163.28.xxx.xxx 未訂閱
引言:
引言: 請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923 站長 領航天使 是用BCB寫的嗎 ??? 新手上路,希望高手解答,感激不盡。
舉一反三 DELPHI 轉成 BCB 就好了
新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-31 02:00:20 IP:163.28.xxx.xxx 未訂閱
請問各位大大,下面的式子錯在那兒??? Byte *ptr int total_n = height * width; int histogram[256]; for (int y = 0; y < height; y ) { ptr = (Byte *)a3->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < width; x ) histogram[ptr[x]] ; } 指標ptr,編譯前都沒問題,但是編譯完後就會出現histogram=E2208 cannot access an inactive scope 新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-31 09:18:14 IP:61.218.xxx.xxx 未訂閱
引言: 請問各位大大,下面的式子錯在那兒??? Byte *ptr int total_n = height * width; int histogram[256]; for (int y = 0; y < height; y ) { ptr = (Byte *)a3->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < width; x ) histogram[ptr[x]] ; } 指標ptr,編譯前都沒問題,但是編譯完後就會出現histogram=E2208 cannot access an inactive scope 新手上路,希望高手解答,感激不盡。
jhus4145: 你未判斷 BMP 是幾位元的圖檔 4 bit = 16 色 8 bit = 256 色 15 bit = 16 bit = 24 bit = 全彩
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-31 10:29:00 IP:61.218.xxx.xxx 未訂閱
PByteArray ptr; long total_n = height * width; long histogram[256]; int R,G,B,c; height=a3->Picture->Bitmap->Height; Width =a3->Picture->Bitmap->Width; a3->Picture->Bitmap->PixelFormat=pf24bit; for (int y = 0; y < height; y ) { ptr = a3->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < width; x ) { b=ptr[x*3]; g=ptr[x*3 1]; r=ptr[x*3 2]; c=(r g b)/3; c=c & 255 ; histogram[c]:=histogram[c] 1; } }
------
︿︿
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-31 13:41:47 IP:163.28.xxx.xxx 未訂閱
各位前輩,cmf兄,不好意思又來麻煩您了, 程式中的長寬及histogram都還是有會出現這個訊息: E2208 cannot access an inactive scope 新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-31 13:57:40 IP:61.218.xxx.xxx 未訂閱
引言: 各位前輩,cmf兄,不好意思又來麻煩您了, 程式中的長寬及histogram都還是有會出現這個訊息: E2208 cannot access an inactive scope 新手上路,希望高手解答,感激不盡。
jhus4145: 可不可以把你的 原始程式 完整的 貼上來 看看到底是哪李錯誤
------
︿︿
jhus4145
一般會員


發表:10
回覆:13
積分:4
註冊:2002-12-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-31 14:05:57 IP:163.28.xxx.xxx 未訂閱
各位前輩,cmf兄,不好意思麻煩您了, void __fastcall TForm1::eOtsuClick(TObject *Sender) { Byte *ptr;//原圖指標 //宣告 int threshold=0; int total_n = Height * Width; //前景與背景的總像素 int histogram[256]; //宣告各灰階度數量之陣列 //讀取影像以計算各灰階點的像素數量 for (int y = 0; y < Height; y ) { ptr = (Byte *)a3->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < Width; x ) histogram[ptr[x]] ; } //計算total_sigma(所有像素點的灰階值總和) int total_sigma = 0; for (int i = 0; i < 256; i ) total_sigma = total_sigma (histogram[i] * i); //將原圖二值化 for (int y = 0; y < Height; y ) { ptr = (Byte *)a3->Picture->Bitmap->ScanLine[y]; for (int x = 0; x < Width; x ) { if (ptr[x] > threshold) ptr[x] = 255; else ptr[x] = 0; } } a3 -> Repaint(); } 新手上路,希望高手解答,感激不盡。
------
新手上路,希望高手解答,感激不盡。
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-31 15:45:47 IP:61.218.xxx.xxx 未訂閱
jhus4145: 改成這樣是看看 void __fastcall TForm1::eOtsuClick(TObject *Sender) { //宣告 int threshold=0; long total_n = Height * Width; //前景與背景的總像素 long histogram[256]; //宣告各灰階度數量之陣列 int R,G,B,s; TColor c; if( a3->Picture->Bitmap->Empty) { return; } for (int x = 0; x < 256; x ) histogram[x]=0; //讀取影像以計算各灰階點的像素數量 for (int y = 0; y < Height; y ) { for (int x = 0; x < Width; x ) { c =a3->Picture->Bitmap->Canvas->Pixels[x,y]; r=GetRValue(c); g=GetGValue(c); b=GetBValue(c); s=(r g b)/3; s=(s&255); histogram[s]:=histogram[s] 1; } } //計算total_sigma(所有像素點的灰階值總和) long total_sigma = 0; for (int i = 0; i < 256; i ) total_sigma = total_sigma (histogram[i] * i); //將原圖二值化 for (int y = 0; y < Height; y ) { for (int x = 0; x < Width; x ) { c =a3->Picture->Bitmap->Canvas->Pixels[x,y]; r=GetRValue(c); g=GetGValue(c); b=GetBValue(c); s=(r g b)/3; s=(s&255); if (s > threshold) a3->Picture->Bitmap->Canvas->Pixels[x,y]=255; else a3->Picture->Bitmap->Canvas->Pixels[x,y]=0; } } a3 -> Repaint(); }
------
︿︿
系統時間:2024-04-26 5:57:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!