RGB值取出、轉回影像時怪怪的 |
尚未結案
|
howdz
一般會員 發表:17 回覆:12 積分:5 註冊:2003-12-16 發送簡訊給我 |
我把影像每個pixel的RGB值讀入一個三維矩陣,
我再轉回去時故意把 R 值設為0轉換回去,結果發現只做了正方形的範圍
程式:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form2->Label1->Visible = false;
String file_name;
file_name=FileListBox1->FileName;
Edit1->Text=file_name;
if(file_name != "")
Form2->Image1->Picture->LoadFromFile(file_name);
Form2->Show();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender)
{
int height = Form2->Image1->Height;
int width = Form2->Image1->Width; int ***OriMatrix;
OriMatrix = new int**[height];
for(int i=0; i<height; i++)
{
OriMatrix[i] = new int*[width];
for(int j=0; j<width; j++)
{
OriMatrix[i][j] = new int[3];
}
}
image_to_array(Form2->Image1,OriMatrix);
array_to_image(OriMatrix,Form2->Image1);
}
//--------------------------------------------------------------------------- //將影像轉換為數值矩陣
void TForm1::image_to_array(TImage * Image, int ***Matrix)
{
for(int i=0;i<Image->Height;i++)
{
for(int j=0;j<Image->Width;j++)
{
Matrix[i][j][0]=GetRValue(Image->Canvas->Pixels[i][j]);
Matrix[i][j][1]=GetGValue(Image->Canvas->Pixels[i][j]);
Matrix[i][j][2]=GetBValue(Image->Canvas->Pixels[i][j]);
}
}
}
//--------------------------------------------------------------------------- //將數值矩陣轉換為影像
void TForm1::array_to_image(int ***Matrix, TImage * Image)
{
for(int i=0;i<Image->Height;i++)
{
for(int j=0;j<Image->Width;j++)
{
Image->Canvas->Pixels[i][j]=TColor(RGB(0,Matrix[i][j][1],Matrix[i][j][2]));
}
}
}
//--------------------------------------------------------------------------- 請問為何不是處理所有的pixel?
p.s.我知道通常處理影像的矩陣是宣告二維的來做,
並不一定要宣告成三維的,但是如果可以的話,
我想維持三維的做法,請問錯誤在哪呢? 發表人 - howdz 於 2005/01/13 23:53:35 發表人 - howdz 於 2005/01/14 00:01:21
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
Hi~howdz你紅色的地方錯了i和j顛倒即可或陣列的ij交換
引言: 我把影像每個pixel的RGB值讀入一個三維矩陣, 我再轉回去時故意把 R 值設為0轉換回去,結果發現只做了正方形的範圍 程式: void __fastcall TForm1::Button2Click(TObject *Sender) { Form2->Label1->Visible = false; String file_name; file_name=FileListBox1->FileName; Edit1->Text=file_name; if(file_name != "") Form2->Image1->Picture->LoadFromFile(file_name); Form2->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { int height = Form2->Image1->Height; int width = Form2->Image1->Width; int ***OriMatrix; OriMatrix = new int**[height]; for(int i=0; i<height; i++) { OriMatrix[i] = new int*[width]; for(int j=0; j<width; j++) { OriMatrix[i][j] = new int[3]; } } image_to_array(Form2->Image1,OriMatrix); array_to_image(OriMatrix,Form2->Image1); } //--------------------------------------------------------------------------- //將影像轉換為數值矩陣 void TForm1::image_to_array(TImage * Image, int ***Matrix) { for(int i=0;i<Image->Height;i++) { for(int j=0;j<Image->Width;j++) { Matrix[i][j][0]=GetRValue(Image->Canvas->Pixels[i][j]); Matrix[i][j][1]=GetGValue(Image->Canvas->Pixels[i][j]); Matrix[i][j][2]=GetBValue(Image->Canvas->Pixels[i][j]); } } } //--------------------------------------------------------------------------- //將數值矩陣轉換為影像 void TForm1::array_to_image(int ***Matrix, TImage * Image) { for(int i=0;i<Image->Height;i++) { for(int j=0;j<Image->Width;j++) { Image->Canvas->Pixels[i][j]=TColor(RGB(0,Matrix[i][j][1],Matrix[i][j][2])); } } } //--------------------------------------------------------------------------- 請問為何不是處理所有的pixel? p.s.我知道通常處理影像的矩陣是宣告二維的來做, 並不一定要宣告成三維的,但是如果可以的話, 我想維持三維的做法,請問錯誤在哪呢? 發表人 - howdz 於 2005/01/13 23:53:35 發表人 - howdz 於 2005/01/14 00:01:21 |
howdz
一般會員 發表:17 回覆:12 積分:5 註冊:2003-12-16 發送簡訊給我 |
引言: Hi~howdz你紅色的地方錯了i和j顛倒即可或陣列的ij交換我把紅色的地方i改成j,j改成i,結果出現下面的錯誤訊息, 後來我對調了存取影像時的i,j就可以了, 如下面紅色的部分: //將影像轉換為數值矩陣 void TForm1::image_to_array(TImage * Image, int ***Matrix) { for(int i=0;i<Image->Height;i++) { for(int j=0;j<Image->Width;j++) { Matrix[i][j][0]=GetRValue(Image->Canvas->Pixels[j][i]); Matrix[i][j][1]=GetGValue(Image->Canvas->Pixels[j][i]); Matrix[i][j][2]=GetBValue(Image->Canvas->Pixels[j][i]); } } } //--------------------------------------------------------------------------- //將數值矩陣轉換為影像 void TForm1::array_to_image(int ***Matrix, TImage * Image) { for(int i=0;i<Image->Height;i++) { for(int j=0;j<Image->Width;j++) { Image->Canvas->Pixels[j][i]=TColor(RGB(0,Matrix[i][j][1],Matrix[i][j][2])); } } } 謝謝rogan321囉! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |