這次的作業是
分別統計一張彩色影像之紅、綠、藍色彩的 PDF
分別統計一張彩色影像之紅、綠、藍色彩的 CDF
首先就是要先讀取圖片的每一個像素點
並計算RGB的值
for(j=0; j<iImageHeight; j++)
{
bPtrImage = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
for(i=0; i<iImageWidth; i++)
for(k=0; k<3; k++)
iHistogram[k][bPtrImage[i*3+k]]++;
}
再將統計好的RGB值
分別畫在三個畫布上
//紅色
Image2->Canvas->Pen->Color=clRed;
Image2->Canvas->MoveTo(i,255);
Image2->Canvas->LineTo(i,255-iHistogram[2][i]*0.25);
//綠色
Image3->Canvas->Pen->Color=clGreen;
Image3->Canvas->MoveTo(i,255);
Image3->Canvas->LineTo(i,255-iHistogram[1][i]*0.25);
//藍色
Image4->Canvas->Pen->Color=clBlue;
Image4->Canvas->MoveTo(i,255);
Image4->Canvas->LineTo(i,255-iHistogram[0][i]*0.25);
PDF
然後做CDF
一樣先計算圖片每個像素的RGB值
再分別在畫布上作圖
//畫圖
Image2->Canvas->MoveTo(0,255);
Image3->Canvas->MoveTo(0,255);
Image4->Canvas->MoveTo(0,255);
for(i=0; i<256; i++)
{
//紅色
Image2->Canvas->Pen->Color=clRed;
Image2->Canvas->LineTo(i,255-iHistogram[2][i]*255/iHistogram[2][255]);
//綠色
Image3->Canvas->Pen->Color=clGreen;
Image3->Canvas->LineTo(i,255-iHistogram[1][i]*255/iHistogram[1][255]);
//藍色
Image4->Canvas->Pen->Color=clBlue;
Image4->Canvas->LineTo(i,255-iHistogram[0][i]*255/iHistogram[0][255]);
}
CDF
其實這個程式並不難
了解每一行做的事情
多花點心就可以做出來
只是中間的過程
debug實在很痛苦
畢竟一直看螢幕
很容易打錯字沒看到
一直以為是哪裡的語法錯誤
沒想到只是打錯字
但做出來的時候心情真的很好~~
沒有留言:
張貼留言