顯示具有 2009hw1 標籤的文章。 顯示所有文章
顯示具有 2009hw1 標籤的文章。 顯示所有文章

2010年1月20日 星期三

HW01_new






程式一開始要先有開圖片檔的程式碼:
OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);






讀取得到圖片長寬的程式碼:


iImageHeight=Image1->Picture->Height;


iImageWidth=Image1->Picture->Width;




宣告RGB三元素的三個陣列的程式碼:


try
  {
   ucMR = new unsigned char *[iImageHeight];
   for (j=0;jucMR[j] = new unsigned char [iImageWidth];
  }
 catch (std::bad_alloc)
  {
    ShowMessage("Could not allocate memory...Bye");
    exit(-1);
  }


}




利用for 迴圈儲存RGB的值的程式碼:


for(i=0;iHeight;i++)
{
for(j=0;jWidth;j++)
{
ucMatrixR[i][j]=GetRValue(Image1->Canvas->Pixels[j][i]);
ucMatrixG[i][j]=GetGValue(Image1->Canvas->Pixels[j][i]);
ucMatrixB[i][j]=GetBValue(Image1->Canvas->Pixels[j][i]);
}
}


心得:
這次我把作業都重新看過讀懂了一次,利用BCB把所要的物件放上後,在用相關的程式碼對映上去,雖然說起來很簡單,其實卻不然,利用上課講解過的程式碼,以及同學們的教導,慢慢拼湊出來的,希望成果還可以! 老師可以給我加點分數

2010年1月18日 星期一

Hw01

這次的作業,一開始本來還看不太懂這些程式碼的意思,
不過在看完學長的作業解說之後,才開始了解,這些程
式的用途。我才照著上面的步驟一一的將它完成;由於一
開始我沒上到課,不知道圖案的色素有分R、G、B,是到
學校之後同學告訴我的,我才又修改加上去的。















關於這作業這麼晚才繳交,我感到非常的抱歉....
在這裡跟老師說聲 對不起

2010年1月17日 星期日

HW1


RGB一直是我覺得最難的部分
因為以前學過另外一種也是用BCB的
在寫程式的時候
我總是會搞混運算元加來加去的部分
可能是我的邏輯思考比較弱
但是老師教得比較簡單
分別宣告3個陣列
再用for迴圈來儲存每個pexel的RGB值
這種方式比較簡單直覺化
看完老師的程式碼我就懂了:)

2010年1月16日 星期六

hw8

期末心得:

由於我的程式不算很強

所以我的作業幾乎都是靠跟同學討論

翻翻課本的理論

才知道作業要怎麼弄出來的

也因為我比較早到的關係

所以也加了不少分:)

影像處理的作業是可以搭配

老師上課的講解 課本的詳述

來完成的

老師上課也很生動

配合投影片以及問問題拉近與學生間的互動

藉由回答問題知道我們到底懂不懂要怎麼寫程式

雖然我的作業總是無法準時完成

但是老師總是很寬容的給我們充分的時間去練習

不懂就問同學達到了學以致用

上老師的影像處理上得很開心

因為老師都教導我們很有趣的程式

使我學起來很上手

最後來一句:謝謝老師:)

2010年1月15日 星期五

HW1

...最近一直忙期末考
昨天上網看成績熊熊發現第一次的作業沒PO到= =
先在這邊請罪 賠個不是
第一次的作業是將圖片讀入
用OpenPictureDialog作按鈕動作
抓到圖片長寬
宣告三個二維陣列分別放入RGB個別的數值
再用OnMouseMove把滑鼠所在的位置的RGB值輸出
後面對程式比較熟悉之後
發現前面的作業是很容易讓人入門的開始
也比較不會讓人不知如何下手
作業從後面寫回來的感覺真奇怪....
再一次跟老師道歉......

2009年12月17日 星期四

HW01


















雖然不是第一次使用BCB
對於習慣寫VC的我來說,還是覺得用不習慣
一開始簡單的開圖
利用Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName)就能輕鬆做到

雖然簡單......我承認我懶惰,拖到最後才交作業

HW-01, 開啟一張圖片。


一開始接觸BCB,一打開看到一個框框,整個傻掉,完全不知如何下手,後來經由同學教導,知道他可以利用點選視窗並使用圖型戒面來設定而產生程式碼,這比一般VC++的視窗程式設計簡單許多。
本次作業使用到開啟並讀取一張圖片,並使用Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName)來開啟圖片,然後再將圖片顯示在設定好的框架上。

2009年11月10日 星期二

HW1

首先必須先道歉這麼晚交作業,請見諒。

此為HW1開圖檔並顯示
我在課堂聽老師說要如何開檔後開始研究C語言相關指令
並用C#介面實作
基本上開檔大同小異以宣告一個Bitmap來接收所要求的路徑位子的圖檔(and picture only)
code: Bitmap bmp=new Bitmap(FileName);

圖1 開檔找路徑

圖檔選擇後用Bitmap接收並且直接將Bitmap丟進PictureBox.Image
code: PictureBox.Image=bmp;

圖2 顯示圖片

2009年10月23日 星期五

HW1 - 開啟一張bmp圖片。

(首先,這麼慢才PO文,抱歉,因為研究了很久...囧)

  這次的作業是開啟一張bmp圖片,並且把RGB的值取出存入三個二維動態陣列儲存,且滑鼠在圖片上移動時,可以隨著滑鼠移動顯示圖片該點的RGB值。實作的流程和幾個比較重要的語法如下:

-------------------------------------------------------------
1.開啟一張bmp圖片
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

2.取得圖片寬高
Height = Image1->Picture->Height;
Width = Image1->Picture->Width;

3.宣告三個二維動態陣列
IMatrixR = new unsigned char *[Height];

4.取得圖片RGB值分別存入陣列
IMatrixR[i][j] = GetRValue(Image1->Canvas->Pixels[j][i]);

5.使用OnMouseMove把滑鼠移動到的點的RGB值輸出
Label4->Caption = AnsiString(GetRValue(Image1->Canvas->Pixels[Y][X]));
-------------------------------------------------------------
實作:
開圖(點圖放大)↓


秀圖(點圖放大)↓


心得:

  一開始因為第一次接觸這個程式語言,光是一些初步的問題,如:怎麼輸出一段文字、要在哪個區塊打程式碼...等,就快把我搞掛了,不過我的個性比較衝動,所以下課鐘響就馬上衝到圖書館借了一本BCB的書,書中提到了簡單的操作,演練之後有了初步瞭解,發現它的邏輯其實與學過的C語言差不多,但它是屬於視窗化的程式設計語言,再加上使用到的函式語法不少,所以不知道的語法就要上網去找一下嚕。

  這次實作大部分是參考老師和學長的程式碼外加書上的範例,卡關最久的地方就是隨滑鼠移動顯示值,這個部份的實作方式就是在顯示圖的物件上點一下再到左邊的小視窗,把標籤切換到"Event"後,有個叫"OnMouseMove"的欄位,在空白欄位上快點兩下,就會在程式碼那看到一個空白的副函式,它的宣告變數中就有X和Y,所以猜想可以利用這兩個變數去控制顯示滑鼠目前所在的位置的值,結果答對了~哈哈。

HW1

這是HW1的作業,作業還是要實際操作過,所以就先補上了。

作業不應該遲交這麼久,實在是很對不起。

---以下是作業部分----

關於動態宣告二為陣列部分

在老師的C++ Builder Programming Notes部落格中有提到,
還有就是在上課時老師說的學長作業參考,他將文字的敘述寫成code
我上網整個做查詢才整個了解。

用new宣告的時候做迴圈分兩層做動態配置,當然後面也是做迴圈來釋放記憶體。

另外還發現了使用malloc來做宣告的方法可以省掉使用迴圈的部分,
不過沒經過實測所以不清楚使用上會不會比較快速。

以上是這個作業所做的查詢

基本操作,BCB跑出來的畫面…

2009年10月16日 星期五

hw1


作業上傳說實在的,實在是有點晚了。
不過BCB這程式我使用上真的是困難重重,第一個是連安裝檔都沒有,好加在有朋友協助、第二個是沒有用過這個程式編輯,他的程式跟C#差不多,但是寫起來又有點那麼的不同、要在有限的時間內抽出時間學習BCB....總之這個東西寫得出來真是費盡我千辛萬苦,雖然程式碼東剪西貼,不過要弄懂也是花了段時間。

2009年10月13日 星期二

第一次學BCB這軟體

感覺有點陌生

之前因為沒有這個軟體

所以一直到現在才上傳

呵呵

不過

經過同學和老師的指導之後

總算是做出來了!!!


我相信

經過之後的課程

和自己多練習之後

應該可以做得更好 ^^



2009年10月9日 星期五

HW01















這個作業其實還蠻容易的
只是用程式來開啟圖片
然後顯示出RGB的值
因為是二維陣列的圖
所以還要去設定它的長與寬
雖然一開始宣告的部份遇到了小小的困難
因為我ㄧ開始只宣告一個二維的陣列
所以到後面就不知道要怎麼讓程式順利的執行
結果
才知道因為有R.G.B三種
所以要宣告三個二維的陣列
害我搞了老半天
雖然二年級有學過BCB
但其實我的程度也不好
所以對於這第一個作業
有點陌生
出了點小差錯
不過好再解決了
也順利的把作業給做出來

HW01


程式的部分:

首先先開啟一張bmp圖片
OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

再來我要取得圖片寬高
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);
iImageHeight= Bmp->Height;
iImageWidth = Bmp->Width;

宣告三個二維動態陣列
try
  {
   ucMR = new unsigned char *[iImageHeight];
   for (j=0;jucMR[j] = new unsigned char [iImageWidth];
  }
 catch (std::bad_alloc)
  {
    ShowMessage("Could not allocate memory...Bye");
    exit(-1);
  }

取得圖片RGB值分別存入陣列
for(i=0;iHeight;i++)
  for(j=0;jWidth;j++)
    {
     ucMR[i][j] =GetRValue(Image1->Canvas->Pixels[i][j]);
    ucMG[i][j] =GetGValue(Image1->Canvas->Pixels[i][j]);
     ucMB[i][j] =GetBValue(Image1->Canvas->Pixels[i][j]);
    }

顯示RGB值輸出

if (Image1->Picture->Bitmap->Empty!=true)
 {                   
  Form1->Label1->Caption=AnsiString(ucMR[X][Y]);
  Form1->Label2->Caption=AnsiString(ucMG[X][Y]);
  Form1->Label3->Caption=AnsiString(ucMB[X][Y]);
 }
這堂課是用BCB的程式來做的
以前有別堂課的老師有用BCB來上過課
所以還算容易上手
但是有一個地方有點不知道該怎麼做
後來問了別人才了解
如何讓滑鼠隨著移動顯示RGB值
實作方式就是在顯示圖的物件上點一下再到左邊的小視窗
把標籤切換到"Event"後有個叫"OnMouseMove"的欄位
在空白欄位上快點兩下
就會在程式碼那看到一個空白的副函式
它的宣告變數中就有X和Y
所以可以利用這兩個變數去控制顯示滑鼠目前所在的位置的值
好不容易解決了問題
順便提到
LENA的圖片好正ㄏㄏ
大家看了應該也會很開心吧
第一次做影像處理的作業
還需要更了解關於制方面的事 
相信下次應該會更好!

HW01


這是一個成功的圖片,有算出這張圖RGB的總合,不過在宣告二維陣列的部分還是有一些小疑問,不知能不能問老師。



還有這是一個成功讀取得圖片(當紅的臉書餐廳),可是問題是讀不出他的RGB值,明明都是RGB圖都可以讀入,但為什麼上面圖可讀出下面的就不可呢?
是個讓我有點疑惑的地方。












這是我第一次修有關於用到bcb的一門課!!!

因為還不是很熟悉bcb,所以一開始在做作業的時候一直寫不出來...
後來還好有同學相助,我開始懂得一點bcb的操作。
能選到這門課很開心,希望以後可以在這門課學到更多東西!!!

HW01


經過這幾次課堂的洗禮,對影像處理領域也有了比較多的認識,
也透過作業獲得蠻多的樂趣與成就感,儘管是與別人一起討論出來的結果,
但是可以將作業完整呈上還是感到很開心。

2009年10月6日 星期二

HW01


這學期 可以搶到影像處理 真的好幸運呢~^^
一開始的作業 使用的是 之前資料結構跟演算法用過的 BCB
所以 很多物件 和 程式打法 都很熟悉~
不過 學習有關影像處理~ 是第一次呢~
希望可以跟老師學習到 很多不一樣的程式
讓自己可以充時一點~
先謝謝老師囉~
這次作業真的讓我絞盡腦汁呢~
呵呵~~^^
不過寫出來了!!!好有成就感耶!!!!
YA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
之後我會繼續加油喔!!!

HW1

用BCB將圖作RGB值統計所需的物件有:

Standard Group -> Mainmenu
Standard Group -> Pennel

※此物件可將被拉進的物件變成一個群組。

再來就是最重要的
Dialogs Group -> OpenpictureDialog
這是關於開啟圖片的物件



再來是語法的部分:

這兩行是用來開圖片的程式碼,可以將圖片從檔案讀進Image1

OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

再來是抓取Image1的高與寬的語法。
底下分別是抓取他的高以及抓取他的寬。

iImageHeight=Image1->Picture->Height;
iImageWidth=Image1->Picture->Width;


接下來我們就是要利用抓取的寬與高,設置兩個For迴圈去將圖片每個像素的儲存格跑過一次


接下來就是利用抓取色彩值得函式庫去抓取每個像素的色彩值


ucMatrixG[i][j]=GetGValue(Image1->Canvas->Pixels[j][i]);
ucMatrixB[i][j]=GetBValue(Image1->Canvas->Pixels[j][i]);
ucMatrixB[i][j]=GetBValue(Image1->Canvas->Pixels[j][i]);


GetRValue,GetGValue,GetBValue分別是對像素抓取紅色、綠色、藍色的色彩值得函式庫。
去取得每個像素的色彩值時,存到ucMatrixR,ucMatrixG,ucMatrixB裡頭。

之後再利用指標去讀ucMatrixR,ucMatrixG,ucMatrixB裡頭的值,再用以下語法輸出RGB值


Edit1->Text=**ucMatrixR;
Edit2->Text=**ucMatrixG;
Edit3->Text=**ucMatrixB;

就可以大功告成囉!




以下是實作圖片。













HW1



這次我第一次用BCB 完成作業

除了上課 主要還是請教同學

完成後很有成就感

雖然只有完成開啟圖片 這項功能

還有很多很多沒有學到的

希望在這堂課 可以學到更多相關的

-------------------------------------------------------

以上是我第一次打的

下面是我後來修改的(為了分數...很現實= =)

第一個作業老師部落格上就有重點

Lee's C++ Builder Programming Notes 裡面image

就有寫到重點

這兩行是把圖片讀進myImage1開啟 BMP 影像

OpenPictureDialog1->Execute() ;

myImage1->Picture->LoadFromFile(OpenPictureDialog1->FileName)

利用宣告三個二維陣列 , 並用new配置記憶體空間 (動態宣告二維陣列

ucRMatrix = new unsigned char *[iImageHeight];

ucGMatrix = new unsigned char *[iImageHeight];

ucBMatrix = new unsigned char *[iImageHeight];

for (int j=0;j

{

ucRMatrix[j] = new unsigned char [iImageWidth];

ucGMatrix[j] = new unsigned char [iImageWidth];

ucBMatrix[j] = new unsigned char [iImageWidth]; }

這是例外處理 跳出

catch (std::bad_alloc)

{

ShowMessage("Could not allocate memory...Bye");

exit(-1);

}

這是用GetRValue和for迴圈抓取圖片的Pixels值取得RGB值分別存入二維陣列

ucRMatrix[x][y] = GetRValue(myImage1->Canvas->Pixels[x][y]);

ucGMatrix[x][y] = GetGValue(myImage1->Canvas->Pixels[x][y]);

ucBMatrix[x][y] = GetBValue(myImage1->Canvas->Pixels[x][y]); }

這個作業直接依靠老師的部落格就能動手完成

也是第一個作業 , 即使不熟bcb的同學 , 參考老師部落格就可以清楚

知道每個細節 , 這項作業是後面作業很重要的基礎 , 所以雖然之前寫

大概知道怎擺怎放 , 後來再打心得 , 才發現原來只是這樣 , 跟以前學的

c/c++觀念上根本完全相同 , 呈現方式不同罷了 , 我想這是我之後在寫心

得所發現的

-----------------------------1/19 (補)

老實說我一年級是學C語言 之後 是學java

與c++很不相同. 所以學起來很辛苦

c++是物件導向語言 , 多了可以建立實體物件的

資料結構也是學java的 那時候是 用類別class 裡面宣告

屬性 , 在主程式new實體物件 , 在用點(.) 例如:area.watch( int b)

來給初值或其他

c++ 是用箭頭(->) 所以一開始看到的時候 都霧煞煞

不過觀念都一樣 , 所以也沒有卡很久

用bcb之後 , 第一次用視窗化程式設計 來寫 , 不像以前都是開空白

#include ... 開始寫

第一次修老師的課 , 學到很多 , 不過自己"一開始"沒有花心思在上面

之後才再補齊課程內容 , 真的是很慚愧 ..

另外一提:try- catch 我從沒用過得說

例外我都是用if-else 如果要我憑空寫 我想我的程式碼應該一大串吧..

還好有老師的部落格範例..XD