[問題] BMP to YUV過程是否那邊出錯!?(已解決)

看板C_and_CPP (C/C++)作者 (大人~不要)時間16年前 (2010/05/22 19:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
遇到的問題: 請問各位先進,目前我將BMP取RGB之後轉換成YUV444,之後又轉YV12。 但是目前出問題的是除了Y是正確的之外,UV應該有嚴重的失真現像。 1.BMP取RGB: BMP:176*144。 由下至上取,左至右取B、G、R。 2.RGB to YUV444: 利用wiki給的公式轉換。 Y = 0.299*R + 0.587*G +0.114*b U = -0.14713*R - 0.28886*G + 0.436*B V = 0.615*R - 0.51499*G - 0.10001*B 資料存放為先Y然後U再V!? 3.YV12: 將2X2陣列的U平均取一值。 將2X2陣列的V平均取一值。 資料存放同2. 希望得到的正確結果: 解決失真現像。 程式跑出來的錯誤結果: UV失真。 開發平台: VC++ & Dev C++。 有問題的code: 1.取出RGB if(BMP_File){ fseek(BMP_File, 54, SEEK_SET); for(i = *BMP_Height -1 ; i >= 0; i--){ for(j = 0; j < *BMP_Width; j++){ fread(&B_Space[i][j], 1, 1, BMP_File); fread(&G_Space[i][j], 1, 1, BMP_File); fread(&R_Space[i][j], 1, 1, BMP_File); } } } 2.RGB to YUV444 for(nH = 0; nH < *BMP_Height; nH++) for(nW =0; nW < *BMP_Width; nW++){ Y_Space[nH][nW] = 0.299 * (float)R_Space[nH][nW] + 0.587 * (float)G_Space[nH][nW] + 0.144 * (float)B_Space[nH][nW]; U_Space[nH][nW] = (-0.14713) * (float)R_Space[nH][nW] - 0.28886 * (float)G_Space[nH][nW] + 0.436 * (float)B_Space[nH][nW]; V_Space[nH][nW] = (0.615) * (float)R_Space[nH][nW] - 0.51499 * (float)G_Space[nH][nW] - 0.10001 * (float)B_Space[nH][nW]; } 3.YUV444 to YV12 for(nH = 0, nH1 = 0; nH < *BMP_Height; nH += 2, nH1++) for(nW = 0, nW1 = 0; nW < *BMP_Width; nW += 2, nW1++){ U1_Space[nH1][nW1] = (U_Space[nH][nW] + U_Space[nH][nW + 1] + U_Space[nH +1][nW] + U_Space[nH + 1][nW + 1]) / 4; V1_Space[nH1][nW1] = (V_Space[nH][nW] + V_Space[nH][nW + 1] + V_Space[nH +1][nW] + V_Space[nH + 1][nW + 1]) / 4; } 補充說明: 抱歉,初學有問題請多多見諒。 謝謝 ----------------------------------------------------------------------- 感謝LittleBob大的指點, 在UV轉換後的數值後面+128即可。 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.245.74 ※ 編輯: MaconChou 來自: 210.240.245.74 (05/22 19:52) ※ 編輯: MaconChou 來自: 210.240.245.74 (05/22 20:21) ※ 編輯: MaconChou 來自: 210.240.245.74 (05/22 20:25) ※ 編輯: MaconChou 來自: 210.240.245.74 (05/22 20:26)
文章代碼(AID): #1Bzy8zlC (C_and_CPP)
文章代碼(AID): #1Bzy8zlC (C_and_CPP)