圖象二值化 |
答題得分者是:japhenchen
|
tidal
初階會員 發表:93 回覆:32 積分:25 註冊:2003-07-15 發送簡訊給我 |
bmp:=TBitMap.Create;
bmp.LoadFromFile('E:\testimage.bmp');
image1.Picture.Bitmap:=bmp;
memstream:=TMemoryStream.Create;
bmp.SaveToStream(memstream);
memstream.Position:=62;
setLength(s,memstream.Size-62);
memstream.Read(s[1],memstream.Size); 之後要如何做才可以把testimage.bmp 變做二值化?
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
你可以直接對tbitmap做scanline操作,不用那麼麻煩還要用tmemorystream來去掉檔頭做圖像處理啦
type PArr = ^TRGBTripleArray; TRGBTripleArray = array [Byte] of TRGBTriple; var bmp : TBitmap; xp: Parr ; Gray , x , y: integer; begin bmp:=TBitmap.create; bmp.loadfromfile('a.bmp'); // 最好圖片都是24bits的圖檔,不然還要做一次轉成24bits的動作 // 一個點佔三個bytes,分別為RGB for y:=0 to bmp.height-1 do begin xp:=scanline[y]; for x:=0 to bmp.width-1 do begin // 開始進行二值化 Gray:=round(xp[x].rgbtRed*0.3) round(xp[x].rgbtGreen*0.59) round(xp[x].rgbtBlue*0.11); // RGB轉成YUV模型取Y分量做灰階值 if Gray>128 then begin xp[x].rgbtRED:=$FF; xp[x].rgbtGreen:=$FF; xp[x].rgbtBlue:=$FF; // 黑色 end else begin xp[x].rgbtRED:=$00; xp[x].rgbtGreen:=$00; xp[x].rgbtBlue:=$00; // 白色 end; end; end; bmp.savetofile('b.bmp'); //存成另外一個檔案囉 bmp.free; end;發表人 - japhenchen 於 2004/10/26 17:14:48 |
tidal
初階會員 發表:93 回覆:32 積分:25 註冊:2003-07-15 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |