在 BUILDER C++ 中編譯第一個影像處理的程式在所附的影像處理的 C++BUILDER程式,讀者可以直接執行,也可以下載範例程式至硬碟,並將檔案屬性改為可讀寫,再使用 C++BUILDER 來開啟這些資料的 .MAK 檔案,您可以將其重新編譯,以求進一步利用。在此我們只挑出兩個簡單的程式,簡述其操作動作,其他的就靠讀者進入光碟後慢慢挖寶,自行體會了。 我們也可以在BUILDER C++ 中到 FILE 下拉式功能表,選取OPEN PROJECT,然後到子目錄中開啟.MAK 檔案,或是從空白表單開始。首先介紹影像二值化與反轉的程式,影像二值化的值可根據 RGB 轉換單色輝度值 Y 的運算式: Y= 0.3R+
其實要在 BUILDER C++ 中要讓電腦展示圖形很簡單,進入 BUILDER C++ 後,系統自動建立表單 FORM1,我們只需使用滑鼠在「Standard」 選取一個物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 LOAD IMAGE,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button1Click(TObject *Sender) { 底下鍵入 if(OpenDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenDialog1->FileName); } 然後回到表單 FORM1,使用滑鼠在「Dialogs」 選取一個物件「OpenDialog」,抓下來置於表單 FORM1,再使用滑鼠在「Additional」 選取一個物件「Image」,也是抓下來置於表單 FORM1,將程式執行(按綠色箭頭按鈕)後,即可執行開檔與展示圖形的動作(圖 1)。
圖 1 程式組譯執行之畫面 我們用滑鼠在抓下來置於表單 FORM1的物件「Image」上面按一下,然後就可以在左邊的 properties 去設定圖形的特性,也可在 events 設定圖形的觸發事件,例如在events - OnMouseMove上面按兩下,進入 Unit1.cpp,在函式_fastcall TForm1::Image
TCColor c=Image1->Canvas->Pixels[X][Y]; Label1->Caption=(int)c.Red; Label2->Caption=(int)c.Green; Label3->Caption=(int)c.Blue; Label4->Caption=X; Label5->Caption=Y; 其中 TCColor c 設定為為圖形之 RGB 值,Label1 到 Label7 定為為圖形之 RGB 資訊之顯示。同時我們連續七次,使用滑鼠在「Standard」 選取物件「label」,抓下來置於表單 FORM1,我們希望如果用滑鼠在畫面上移動,就能觀察影像RGB灰階變化以及座標位置。Label1 到 Label7 之字體、背景及顏色可由左邊的 properties 去設定其特性。 我們使用滑鼠在「Standard」 選取物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 BINARY,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button
int x,y; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; if((int)c.Green < 100) { Image1->Canvas->Pixels[x][y]=TCColor(0, 0, 0).Color; } else { Image1->Canvas->Pixels[x][y]=TCColor(255, 255, 255).Color; } } } 我們使用滑鼠在「Standard」 選取物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 INVERSE,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button
int x,y; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; Image1->Canvas->Pixels[x][y]=TCColor(255-(int)c.Red, 255-(int)c.Green, 255-(int)c.Blue).Color; } } 此時其畫面如圖 2 所示。
圖 2 BUILDER C++ 編輯畫面 再到檔頭宣告 #include "tccolor.h",這時整個 Unit1.cpp的內容是這樣的: //--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "tccolor.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int x,y; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; if((int)c.Green < 100) { Image1->Canvas->Pixels[x][y]=TCColor(0, 0, 0).Color; } else { Image1->Canvas->Pixels[x][y]=TCColor(255, 255, 255).Color; } } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { TCColor c=Image1->Canvas->Pixels[X][Y]; Label1->Caption=(int)c.Red; Label2->Caption=(int)c.Green; Label3->Caption=(int)c.Blue; Label4->Caption=X; Label5->Caption=Y; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { int x,y; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; Image1->Canvas->Pixels[x][y]=TCColor(255-(int)c.Red, 255-(int)c.Green, 255-(int)c.Blue).Color; } } } //--------------------------------------------------------------------------- 我們只要將程式加以組譯執行,就可以看到畫面如圖 3 所示:
圖 3 程式組譯執行之畫面 這時候如果用滑鼠在畫面上移動,就能觀察影像RGB灰階變化以及座標位置,如果用滑鼠按下 binary 的按鈕,就可以看到影像變為黑白兩色(圖 4)。
圖 4 用滑鼠按下 binary 的按鈕執行之畫面 如果再用滑鼠按下 inverse 的按鈕,就可以看到影像黑變為白、白變為黑兩色互換的結果(圖 5)。
圖 5 用滑鼠按下 inverse 的按鈕執行之畫面 原程式碼及其說明,讀者可自行下載研究,別忘了將檔案屬性改為可讀寫,再使用 C++BUILDER 來開啟子目錄的 PROJECT1.MAK 檔案,您可以將其重新編譯,以求進一步利用。測試用影像檔案檔名為bluesky.bmp。 |