RGB to YUV YUV toRGB |
尚未結案
|
p00003816912
一般會員 發表:1 回覆:1 積分:0 註冊:2009-11-28 發送簡訊給我 |
問題是寫一個先讀入bmp檔,然後將其rgb值取出後轉成yuv,再將yuv值轉成rgb後輸出,以下是我這兩個轉換過程用的code
跑出來顏色非常明顯的跑掉,試過兩個公式都會跑掉,所以應該是我程式碼的問題,請各位大大幫忙看看,應該不會花多少時間,謝謝~ 1、rgb to yuv for(int i=0;i { for(int j=0;j { tempY[j][i]= (GetRValue(Image1->Canvas->Pixels[j][i])*0.299) (GetGValue(Image1->Canvas->Pixels[j][i])*0.587) (GetBValue(Image1->Canvas->Pixels[j][i])*114); if(tempY[j][i]>255) tempY[j][i]=255; if(tempY[j][i]<0) tempY[j][i]=0; if(i%2==0 && j%2==0) { tempU[j/2][i/2]=0.493*(GetBValue(Image1->Canvas->Pixels[j][i])-tempY[j][i]); tempV[j/2][i/2]=0.877*(GetRValue(Image1->Canvas->Pixels[j][i])-tempY[j][i]); if(tempU[j/2][i/2]>127) tempU[j/2][i/2]=127; if(tempU[j/2][i/2]<-128) tempU[j/2][i/2]=(-128); if(tempV[j/2][i/2]>127) tempV[j/2][i/2]=127; if(tempV[j/2][i/2]<-128) tempV[j/2][i/2]=(-128); } } } 2、 yuv to rgb for(int i=0;i<(Image1->Picture->Bitmap->Height);i ) { for(int j=0;j<(Image1->Picture->Bitmap->Width);j ) { tempB=(tempU[j/2][i/2] 0.493*tempY[j][i])/0.493; tempR=(tempV[j/2][i/2] 0.877*tempY[j][i])/0.877; tempG=(tempY[j][i]-0.144*tempB-0.299*tempR)/0.587; if(tempR>255)tempR=255; if(tempG>255)tempG=255; if(tempB>255)tempB=255; if(tempR<0)tempR=0; if(tempG<0)tempG=0; if(tempB<0)tempB=0; Image2->Canvas->Pixels[j][i]=(TColor)RGB(tempR,tempG,tempB); } } 公式: Y=0.299R 0.587G 0.114B - (1) U=0.493(B-Y) -(2) V=0.877(R-Y) -(3) 由 (2) (3) 得 (U 0.493Y)/ 0.493 =B -(4) (V 0.877Y)/ 0.877 =R -(5) 由(1)(4)(5)得 (Y-0.114B-0.299R)/0.587=G 編輯記錄
p00003816912 重新編輯於 2009-11-28 16:26:27, 註解 無‧
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
為什麼UV需要這個判斷式
可以說明一下嗎 if(i%2==0 && j%2==0) {
} 而且 奇怪了... 我上維基查轉換公是怎麼跟你的不太一樣 http://zh.wikipedia.org/wiki/YUV 而且看你的正規化用法就知道你不了解YUV是啥 YUV的範圍你要搞清楚不能亂正規化 前面加個byte給他吧 ----->> (byte)GetRValue(Image1->Canvas->Pixels[j][i]) 加個byte之後 random variable 轉出來的絕對會落在範圍內 不用再一次正規劃
------
恩...
編輯記錄
istillloving 重新編輯於 2009-11-29 11:50:19, 註解 無‧
istillloving 重新編輯於 2009-11-29 11:53:15, 註解 無‧ istillloving 重新編輯於 2009-11-29 11:59:04, 註解 無‧ |
p00003816912
一般會員 發表:1 回覆:1 積分:0 註冊:2009-11-28 發送簡訊給我 |
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |