如何將圖片中各Pixel的RGB取出… |
答題得分者是:cmf
|
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
引言: 各位大大你好: 如何用BCB將圖片中各Pixel的RGB取出作統計並繪圖,作二值化 再作Scorllbar對應改變圖片中的亮度。 新手上路,希望高手解答,感激不盡。請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923
------
︿︿ |
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
[/quote] 請參考這篇
【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢?
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923
站長 領航天使 是用BCB寫的嗎 ???
新手上路,希望高手解答,感激不盡。
[/quote]
------
新手上路,希望高手解答,感激不盡。 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
引言: 請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923 站長 領航天使 是用BCB寫的嗎 ??? 新手上路,希望高手解答,感激不盡。舉一反三 DELPHI 轉成 BCB 就好了
------
︿︿ |
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
|
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
引言:新手上路,希望高手解答,感激不盡。引言: 請參考這篇 【問題】高手們,請問如何將圖形二值化(黑白化)再取得影像的黑白點數呢? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23923 站長 領航天使 是用BCB寫的嗎 ??? 新手上路,希望高手解答,感激不盡。舉一反三 DELPHI 轉成 BCB 就好了
------
新手上路,希望高手解答,感激不盡。 |
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
請問各位大大,下面的式子錯在那兒??? 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 發送簡訊給我 |
引言: 請問各位大大,下面的式子錯在那兒??? 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 發送簡訊給我 |
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 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
jhus4145
一般會員 發表:10 回覆:13 積分:4 註冊:2002-12-28 發送簡訊給我 |
各位前輩,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 發送簡訊給我 |
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();
}
------
︿︿ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |