全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2903
推到 Plurk!
推到 Facebook!

連續框取平均值

答題得分者是:ikk
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-27 12:53:41 IP:163.23.xxx.xxx 訂閱


各位大大好:
以下程式碼是我要對圖上連續黃色框框做處理,它會將圖上灰階圖裡取連續框框,在這我只取一個做樣品,現在可以取得R G B三個值,但是,我要的是每個區塊裡的灰階值做相加取平均,並取得其連續黃色區的平均值,所以正常來說大約會有10個平均值,可是我的程式碼現在是變成取整張圖的灰階值在除20*20去做平均,不知那個環節有問題?
煩請各位大大幫忙
感謝

[code cpp]
int X=200;
int Y=20;
int x_Get = 20;
int y_Get = 20;
int X_loop = X/x_Get;
int Y_loop = Y/y_Get;
int Left_Start = 0;
int Top_Start = 0;
BYTE r;
BYTE g;
BYTE b;
char Msg[128];
int aveR=0, aveG=0, aveB=0;
int aveR1, aveG1, aveB1;

for(int i=0; i for(int j=0; j {
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )//灰階範圍
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
Image1->Canvas->Rectangle(
Left_Start i * x_Get,
Top_Start j * y_Get,
Left_Start (i 1) * x_Get,
Top_Start (j 1) * y_Get);

r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
aveR1 =aveR/(20*20);
aveG1 =aveG/(20*20);
aveB1 =aveB/(20*20);

sprintf(Msg,"R(%d) G(%d) B(%d)", r, g, b);
Memo2->Lines->Add(Msg);
Memo2->Lines->Add(aveR1);
Memo2->Lines->Add(aveG1);
Memo2->Lines->Add(aveB1);

}

}
[/code]
------
新手報到
編輯記錄
913028 重新編輯於 2009-03-30 00:08:35, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-27 16:31:32 IP:163.28.xxx.xxx 訂閱
只要根據目前的 X_loop 的 i值存在不同地方,
就可取得各框的平均值
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-29 23:47:27 IP:125.224.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
只要根據目前的 X_loop 的 i值存在不同地方,
就可取得各框的平均值
================================================
ikk大大你好:
這幾天試了的結果,還是想不出頭緒
麻煩大大可否再說個明白些
感謝
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-30 14:25:28 IP:163.28.xxx.xxx 訂閱

[code cpp]
int avg_R_List[100];
int avg_G_List[100];
int avg_B_List[100];

for(int i=0; i{
aveR = 0;
aveG = 0;
aveB = 0;
for(int j=0; j {
...
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
//aveR1 =aveR/(20*20);
//aveG1 =aveG/(20*20);
//aveB1 =aveB/(20*20);
...
}

avg_R_List[i] = aveR/(20*20);
avg_G_List[i] = aveG/(20*20);
avg_B_List[i] = aveB/(20*20);
}

[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
編輯記錄
ikk 重新編輯於 2009-03-30 14:26:53, 註解 無‧
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-30 16:27:24 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================

[code cpp]
int avg_R_List[100];
int avg_G_List[100];
int avg_B_List[100];

for(int i=0; i{
aveR = 0;
aveG = 0;
aveB = 0;
for(int j=0; j {
...
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
//aveR1 =aveR/(20*20);
//aveG1 =aveG/(20*20);
//aveB1 =aveB/(20*20);
...
}

avg_R_List[i] = aveR/(20*20);
avg_G_List[i] = aveG/(20*20);
avg_B_List[i] = aveB/(20*20);
}

[/code]
=========================================
ikk大大你好:
我加入底下迴圈裡aveR = 0; aveG = 0; aveB = 0; 就可顯現,還有 加入這個寫法avg_R_List[i]我要怎麼把這些i裡面的平均值顯現在Memo2->Lines->Add()呢?
感謝
[code cpp]
int X=200;
int Y=20;
int x_Get = 20;
int y_Get = 20;
int X_loop = X/x_Get;
int Y_loop = Y/y_Get;
int Left_Start = 0;
int Top_Start = 0;
BYTE r;
BYTE g;
BYTE b;
char Msg[128];
int aveR=0, aveG=0, aveB=0;
int aveR1, aveG1, aveB1;

for(int i=0; i for(int j=0; j {
aveR = 0;
aveG = 0;
aveB = 0;
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )//灰階範圍
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
Image1->Canvas->Rectangle(
Left_Start i * x_Get,
Top_Start j * y_Get,
Left_Start (i 1) * x_Get,
Top_Start (j 1) * y_Get);
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
sprintf(Msg,"R(%d) G(%d) B(%d)", r, g, b);
Memo2->Lines->Add(Msg);
}
aveR1 =aveR/(20*20);
aveG1 =aveG/(20*20);
aveB1 =aveB/(20*20);
Memo2->Lines->Add(aveR1);
Memo2->Lines->Add(aveG1);
Memo2->Lines->Add(aveB1);

}
[/code]
------
新手報到
編輯記錄
913028 重新編輯於 2009-03-30 16:29:19, 註解 無‧
913028 重新編輯於 2009-03-30 16:30:57, 註解 無‧
913028 重新編輯於 2009-03-30 16:31:57, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-30 16:33:31 IP:163.28.xxx.xxx 訂閱

[code cpp]
for(int i=0; i{
sprintf(Msg,"avg_R_List[%d] = (%d), avg_G_List[%d] = (%d), avg_B_List[%d] = (%d)", i, avg_R_List[i], i, avg_G_List[i], i, avg_B_List[i]);
Memo2->Lines->Add(Msg);
}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
編輯記錄
ikk 重新編輯於 2009-03-30 16:33:56, 註解 無‧
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-30 18:15:21 IP:60.248.xxx.xxx 訂閱

===================引 用 ikk 文 章===================

[code cpp]
for(int i=0; i{
sprintf(Msg,"avg_R_List[%d] = (%d), avg_G_List[%d] = (%d), avg_B_List[%d] = (%d)", i, avg_R_List[i], i, avg_G_List[i], i, avg_B_List[i]);
Memo2->Lines->Add(Msg);
}
[/code]
=================================================
ikk大大你好:
已可使用感謝。
在請問一下,我把各自區塊裡的灰階值去減掉自己區塊所平均得出的平均值,如:zeromeanR=r-aveR1[i]; zeromeanG=g-aveR1[i]; zeromeanB=b-aveR1[i];這個做完後我要將這個結果處理在圖上,現在不知要如何著手?
麻煩大大

[code cpp]
int X=200;
int Y=20;
int x_Get = 20;
int y_Get = 20;
int X_loop = X/x_Get;
int Y_loop = Y/y_Get;
int Left_Start = 0;
int Top_Start = 0;
BYTE r;
BYTE g;
BYTE b;
char Msg[128];
int aveR=0, aveG=0, aveB=0;
int aveR1[100], aveG1[100], aveB1[100];
int zeromeanR,zeromeanG,zeromeanB;
for(int i=0; i for(int j=0; j {
aveR = 0;
aveG = 0;
aveB = 0;
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )//灰階範圍
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
Image1->Canvas->Rectangle(
Left_Start i * x_Get,
Top_Start j * y_Get,
Left_Start (i 1) * x_Get,
Top_Start (j 1) * y_Get);
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
sprintf(Msg,"R(%d) G(%d) B(%d)", r, g, b);
Memo2->Lines->Add(Msg);
}
aveR1[i] =aveR/(20*20);
aveG1[i] =aveG/(20*20);
aveB1[i] =aveB/(20*20);
Memo2->Lines->Add(aveR1);
Memo2->Lines->Add(aveG1);
Memo2->Lines->Add(aveB1);

zeromeanR=r-aveR1[i];
zeromeanG=g-aveR1[i];
zeromeanB=b-aveR1[i];


}
[/code]
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-31 08:59:53 IP:163.28.xxx.xxx 訂閱
你可以從繪圖相關程式去學習...

Image1->Canvas->Pixels[ix][iy] = (TColor)0xffffff;
就可以將此pixel改成此顏色((TColor)0xffffff).
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-31 11:02:13 IP:163.23.xxx.xxx 訂閱
ikk大大你好:
我要在黃色區塊內的各灰階值,減去在此區塊所得的平均值,並顯現出新的黃色區塊的灰階值,我的寫法為:
zeromeanR[i]=r-aveR1[i];
zeromeanG[i]=g-aveR1[i];
zeromeanB[i]=b-aveR1[i];
但是下斷點所顯現的,卻是只有最後一個相減的值,請問要如何才能顯現黃色區塊的新灰階值呢?
PS:因為要把這些值處理到黃色區塊,還是沒頭緒。
感謝


[code cpp]
int X=200;
int Y=20;
int x_Get = 20;
int y_Get = 20;
int X_loop = X/x_Get;
int Y_loop = Y/y_Get;
int Left_Start = 0;
int Top_Start = 0;
BYTE r;
BYTE g;
BYTE b;
char Msg[128];
int aveR=0, aveG=0, aveB=0;
int aveR1[100], aveG1[100], aveB1[100];
int zeromeanR[100],zeromeanG[100],zeromeanB[100];
for(int i=0; i for(int j=0; j {
aveR = 0;
aveG = 0;
aveB = 0;
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )//灰階範圍
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
Image1->Canvas->Rectangle(
Left_Start i * x_Get,
Top_Start j * y_Get,
Left_Start (i 1) * x_Get,
Top_Start (j 1) * y_Get);
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
sprintf(Msg,"R(%d) G(%d) B(%d)", r, g, b);
Memo2->Lines->Add(Msg);
}
aveR1[i] =aveR/(20*20);
aveG1[i] =aveG/(20*20);
aveB1[i] =aveB/(20*20);
Memo2->Lines->Add(aveR1);
Memo2->Lines->Add(aveG1);
Memo2->Lines->Add(aveB1);
zeromeanR[i]=r-aveR1[i];
zeromeanG[i]=g-aveR1[i];
zeromeanB[i]=b-aveR1[i];

}
[/code]
------
新手報到
編輯記錄
913028 重新編輯於 2009-03-31 11:02:49, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-03-31 14:12:59 IP:163.28.xxx.xxx 訂閱
???

[code cpp]
zeromeanR[i]=r-aveR1[i];
zeromeanG[i]=g-aveG1[i];
zeromeanB[i]=b-aveB1[i];
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-03-31 14:28:08 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
???

[code cpp]
zeromeanR[i]=r-aveR1[i];
zeromeanG[i]=g-aveG1[i];
zeromeanB[i]=b-aveB1[i];
[/code]
================================================
ikk大大你好:
我是要把黃色區塊裡的r g b灰階像素值,減去黃色區塊所得的平均值aveR1[i] aveG1[i] aveB1
,在把這些新的灰階值顯現在zeromeanR[i] zeromeanG[i] zeromeanB[i],做零平均處理。
不知這樣的寫法對嗎?
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-03-31 14:31:17 IP:163.28.xxx.xxx 訂閱
圖像演算法我就不清楚了...
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-03-31 14:36:30 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
圖像演算法我就不清楚了...
================================================
ikk大大你好:
那請問如何把這些新的灰階值,全部顯示在陣列中呢?我是要黃色區塊減完的值。
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-03-31 14:46:59 IP:163.28.xxx.xxx 訂閱
你有試過寫入嗎??
code ?
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-03-31 14:57:16 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
你有試過寫入嗎??
code ?
================================================
ikk大大你好:
我執行到以下程式時,都只出現最後一位灰階值減去平均值的數值
[code cpp]
zeromeanR[i]=r-aveR1[i];
zeromeanG[i]=g-aveG1[i];
zeromeanB[i]=b-aveB1[i];
[/code]
我是用底下來看的,先看R的。


[code cpp]
sprintf(Msg555,"zeromeanR[%d](%d) ",i, zeromeanR[i]);
Memo2->Lines->Add(Msg555);

[/code]

------
新手報到
編輯記錄
913028 重新編輯於 2009-03-31 14:58:31, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-03-31 15:10:41 IP:163.28.xxx.xxx 訂閱
從你的程式邏輯來看是這樣沒錯...
我並沒有詳細研究你的演算法, 我只是針對code來解而已..

你的問題是如何將新算出來的點, 覆蓋在舊的點上?
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-03-31 15:25:50 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
從你的程式邏輯來看是這樣沒錯...
我並沒有詳細研究你的演算法, 我只是針對code來解而已..

你的問題是如何將新算出來的點, 覆蓋在舊的點上?
=================================================
ikk大大你好:
我的問題就是要把這些新的點,覆蓋在舊的點上,試了試總是沒什麼結果,煩請大大幫忙。
感謝
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#18 引用回覆 回覆 發表時間:2009-03-31 15:32:37 IP:163.28.xxx.xxx 訂閱
那就再run一次ix 和 iy迴圈, 
取出舊點(這code已經有了),
再放上新點..( 寫回pixel陣列 )
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#19 引用回覆 回覆 發表時間:2009-03-31 16:08:34 IP:220.130.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
那就再run一次ix 和 iy迴圈,
取出舊點(這code已經有了),
再放上新點..( 寫回pixel陣列 )
================================================
ikk大大你好:
可以麻煩你貼個範例嗎?還是不太懂意思。
------
新手報到
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#20 引用回覆 回覆 發表時間:2009-03-31 16:14:35 IP:163.28.xxx.xxx 訂閱

[code cpp]
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )
{
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);

r -= aveR1[i];
g -= aveG1[i];
b -= aveB1[i];

Image1->Canvas->Pixels[ix][iy] = (TColor)RGB(r,g,b);
}
}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#21 引用回覆 回覆 發表時間:2009-03-31 16:56:03 IP:163.23.xxx.xxx 訂閱
ikk大大你好:
我把程式碼貼在*字範圍的地方,但是,執行時為什麼都會變成,有些方塊是彩色的有些則是有雜訊黑白的,正常來講會變成方塊是灰階且明亮度不同,不知是那個環節又出現問題了。
麻煩大大

[code cpp]
int X=200;
int Y=20;
int x_Get = 20;
int y_Get = 20;
int X_loop = X/x_Get;
int Y_loop = Y/y_Get;
int Left_Start = 0;
int Top_Start = 0;
BYTE r;
BYTE g;
BYTE b;
char Msg[128];
int aveR=0, aveG=0, aveB=0;
int aveR1[100], aveG1[100], aveB1[100];
int zeromeanR,zeromeanG,zeromeanB;
for(int i=0; i for(int j=0; j {
aveR = 0;
aveG = 0;
aveB = 0;
for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )//灰階範圍
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
Image1->Canvas->Rectangle(
Left_Start i * x_Get,
Top_Start j * y_Get,
Left_Start (i 1) * x_Get,
Top_Start (j 1) * y_Get);
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
aveR =aveR r;
aveG =aveG g;
aveB =aveB b;
sprintf(Msg,"R(%d) G(%d) B(%d)", r, g, b);
Memo2->Lines->Add(Msg);
}
* for(int ix=(Left_Start i * x_Get);ix<(Left_Start (i 1) * x_Get);ix )
{
for(int iy= (Top_Start j * y_Get);iy<(Top_Start (j 1) * y_Get);iy )
{
r = GetRValue(Image1->Canvas->Pixels[ix][iy]);
g = GetGValue(Image1->Canvas->Pixels[ix][iy]);
b = GetBValue(Image1->Canvas->Pixels[ix][iy]);
r -= aveR1[i];
g -= aveG1[i];
b -= aveB1[i];

Image1->Canvas->Pixels[ix][iy] = (TColor)RGB(r,g,b);
}
}*
aveR1[i] =aveR/(20*20);
aveG1[i] =aveG/(20*20);
aveB1[i] =aveB/(20*20);
Memo2->Lines->Add(aveR1);
Memo2->Lines->Add(aveG1);
Memo2->Lines->Add(aveB1);
zeromeanR=r-aveR1[i];
zeromeanG=g-aveR1[i];
zeromeanB=b-aveR1[i];

}
[/code]
------
新手報到
編輯記錄
913028 重新編輯於 2009-03-31 16:57:36, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#22 引用回覆 回覆 發表時間:2009-03-31 17:19:54 IP:163.28.xxx.xxx 訂閱
我只是針對code作解法, 你演算法的問題,就靠你自己了...
看看是否有產生 負數情況...
------
FPGA驗證, FPGA開發平台, http://smims.com
s8131556
一般會員


發表:0
回覆:9
積分:16
註冊:2003-10-30

發送簡訊給我
#23 引用回覆 回覆 發表時間:2009-03-31 17:28:40 IP:59.126.xxx.xxx 訂閱
你的是灰階圖,應該 r = g = b
只要針對其中一個顏色做計算就好,不需要分開處理喔。
編輯記錄
s8131556 重新編輯於 2009-03-31 17:30:40, 註解 無‧
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#24 引用回覆 回覆 發表時間:2009-03-31 22:43:49 IP:125.224.xxx.xxx 訂閱


各位大大你好:
上圖為處理完後的結果,就是會有黑黑的一塊一塊,不知是不是負值產生的?
------
新手報到
s8131556
一般會員


發表:0
回覆:9
積分:16
註冊:2003-10-30

發送簡訊給我
#25 引用回覆 回覆 發表時間:2009-04-01 09:06:03 IP:59.126.xxx.xxx 訂閱
除了負值,也有可能是超過255,印出來看看結果才知道
可以用下面的方法印:

[code cpp]
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Byte *ptr;
Bmp->Assign(Image1->Picture->Bitmap);
AnsiString result;
for(int i=0;iHeight;i )
{
result="";
ptr=(Byte*)Bmp->ScanLine[i];
for(int j=0;jWidth; j )
{
int x;
ptr[j*3] = x; //取得點 (i, j) 的像素值,因為是灰階,所以只需要取其中一個顏色
/************

針對 x 進行你要的處理後

*************/
// 把值回存至圖片中
ptr[j*3] = x;
ptr[j*3 1] = x;
ptr[j*3 2] = x;
result = result IntToHex(x, 2) " "; // 將值用16進制,兩位數的方式顯示出來
}
Memo1->Lines->Add(result);
}
Image1->Picture->Assign(Bmp);
delete Bmp;
[/code]
編輯記錄
s8131556 重新編輯於 2009-04-01 09:06:51, 註解 無‧
s8131556 重新編輯於 2009-04-01 09:09:13, 註解 無‧
s8131556 重新編輯於 2009-04-01 09:12:02, 註解 無‧
s8131556 重新編輯於 2009-04-01 09:16:42, 註解 無‧
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#26 引用回覆 回覆 發表時間:2009-04-01 10:43:21 IP:163.23.xxx.xxx 訂閱

===================引 用 s8131556 文 章===================
除了負值,也有可能是超過255,印出來看看結果才知道
可以用下面的方法印:

[code cpp]
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Byte *ptr;
Bmp->Assign(Image1->Picture->Bitmap);
AnsiString result;
for(int i=0;iHeight;i )
{
result="";
ptr=(Byte*)Bmp->ScanLine[i];
for(int j=0;jWidth; j )
{
int x;
ptr[j*3] = x; //取得點 (i, j) 的像素值,因為是灰階,所以只需要取其中一個顏色
/************

針對 x 進行你要的處理後

*************/
// 把值回存至圖片中
ptr[j*3] = x;
ptr[j*3 1] = x;
ptr[j*3 2] = x;
result = result IntToHex(x, 2) " "; // 將值用16進制,兩位數的方式顯示出來
}
Memo1->Lines->Add(result);
}
Image1->Picture->Assign(Bmp);
delete Bmp;
[/code]
=================================================================
s8131556大大你好:
我將你給的程式用在一個Buttong上,先處理完如圖檔有黑色區塊後在使用,但是,顯示的值卻都只有 "00"...."00",然後我再用另一個方式將你給的程式放進處理區塊程式裡,值顯示了"C0000"...."C0000" 不知哪個程序上出了問題?
感謝
------
新手報到
編輯記錄
913028 重新編輯於 2009-04-01 11:09:17, 註解 無‧
s8131556
一般會員


發表:0
回覆:9
積分:16
註冊:2003-10-30

發送簡訊給我
#27 引用回覆 回覆 發表時間:2009-04-01 13:07:56 IP:59.126.xxx.xxx 訂閱
這邊我不懂為何你要對  進行 Y_loop
因為你的高只有一次而已不是嗎?
[code cpp]
for(int i=0; i for(int j=0; j [/code]
而且黃框框會重疊嗎?
如果不會重疊應該要寫成如下:
[code cpp]
int startX =20; //灰階的起點
int startY =20;
int endX =200; //灰階的終點
int endY =40;
int aveR=0;
for(int i=20; i<=endX;i =20) // =20 的20是黃框每次右移的量
{
aveR=0;
for(int j=0; j<20;j ) //這邊的20也是寬度的量
{
for(int k=startY; k<=endY; k )
{
int r = GetRValue(Image1->Canvas->Pixels[k][i j]);
aveR =r;
}
}
aveR /=400;
Memo1->Lines->Add(IntToStr(aveR)); //應該會有10個數字吧?
}
[/code]
編輯記錄
s8131556 重新編輯於 2009-04-01 13:10:06, 註解 無‧
s8131556 重新編輯於 2009-04-01 13:11:17, 註解 無‧
913028
一般會員


發表:30
回覆:41
積分:19
註冊:2008-06-24

發送簡訊給我
#28 引用回覆 回覆 發表時間:2009-04-01 23:04:40 IP:125.224.xxx.xxx 訂閱
===================引 用 s8131556 文 章===================
這邊我不懂為何你要對 進行 Y_loop
因為你的高只有一次而已不是嗎?
..................

而且黃框框會重疊嗎?
..................

=========================================================
s8131556大大你好:
1.我在此部分,我只取我要處理的圖像的一部份,所以,我的不只進行一次。
2.黃框是不會重疊,只是會上下左右都會有,不過大大给我的範例,對我來說,讓我又多學到一招,非常感謝
也感謝ikk大大敎我這麼多

------
新手報到
系統時間:2024-04-27 1:44:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!