學會從計算和程式的角度分析問題通過完成本實驗,理解計算思維,即從問題出發,通過逐步分析和分解,把原問題轉化為可用程式方式解決的問題。在此過程中設計出乙個解決方案。
進一步理解彩色空間的概念並掌握不同彩色空間轉換的基本方程。
通過逐步設計程式,掌握程式設計細節:如查詢表的設計,記憶體分配,對 u 和 v 訊號進行下取樣,檔案讀寫過程等。掌握程式除錯的基本方法。
xcode、yuvviewerplus
儲存方式:
rgb的儲存方式:rgb三個分量按照b、g、r的順序儲存。(4:4:4)
yuv的儲存方式:先存y再存uv分量。(4:2:0)
轉換公式:
y = 0.298r + 0.612g + 0.117b
u = -0.1684r - 0.3316g + 0.5b + 128
v = 0.5r - 0.4187g - 0.0813b + 128
r = y + 1.402 * (v-128)
g = y - 0.3441 * (u-128) - 0.7139 * (v-128)
b = y + 1.7718 * (u-128) - 0.0013 * (v-128)
1.計算uv分量時+128是因為uv分量有負值,加上128可以將變化範圍調整為0—255。初始化程式:開啟兩個檔案、定義變數和緩衝區等等;2.由於rgb值有可能出現超出0-255的範圍,已知unsigned char型資料佔1位元組,超出0-255的數值會出現溢位現象,發生彩色顯示錯誤。所以我們可以利用float型中間變數(rf/bf/gf)來暫存由彩色轉換公式計算得來的rgb值,經過大於255則賦值為255,小於0則賦值為0的判斷以後,再給unsigned char型的r/g/b進行賦值,在0-255範圍內的數值則進行強制型別轉換。
讀取rgb檔案,將其資料寫入緩衝區;
呼叫rgb2yuv的函式實現rgb到yuv資料的轉換;
在轉換函式中對uv分量進行下取樣
寫yuv檔案
程式收尾工作(關閉檔案,釋放緩衝區)
main.cpp
#include
#include
#include
#include
#include
"rgb2yuv.hpp"
using
namespace std;
intmain
(int argc,
const
char
* ar**)
rgb2yuv.cpp
#include
"rgb2yuv.hpp"
#include
#include
#include
#include
using
namespace std;
intrgb2yuv
(int x_dim,
int y_dim,
unsigned
char
* bmp,
unsigned
char
* y_out,
unsigned
char
* u_out,
unsigned
char
* v_out)
}// subsample uv 下取樣
for(
int j =
0; j < y_dim/
2; j ++)}
free
(u_buffer)
;free
(v_buffer)
;return0;
}
main.cpp
#include
#include
#include
#include
#include
"yuv2rgb.hpp"
using
namespace std;
intmain
(int argc,
const
char
* ar**)
yuv2rgb.cpp
#include
"yuv2rgb.hpp"
#include
#include
#include
#include
using
namespace std;
intyuv2rgb
(int x_dim,
int y_dim,
unsigned
char
* rgb_out,
unsigned
char
* y_in,
unsigned
char
* u_in,
unsigned
char
* v_in)
} y = y_buffer;
u = sub_u_buf;
v = sub_v_buf;
b = rgb_buffer;
for(
int j=
0; j < y_dim; j++)}
if(sub_u_buf !=
null
)free
(sub_u_buf);if
(sub_v_buf !=
null
)free
(sub_v_buf)
;free
(u_buffer)
;free
(v_buffer)
;return0;
}
採用了中間變數,但依然出現彩色溢位的情況,也許是因為計算係數精度、強制型別轉換等帶來的誤差。 實驗一 彩色空間轉換實驗
rgb計色系統是基於三基色原理的顏色計算系統,由紅光分量r 綠光分量g 藍光分量b可以混合出任意彩色光。在rgb檔案中,單個畫素的儲存形式為bgr順序。yuv色彩空間通過乙個亮度訊號y和兩個色差訊號u v來表示影象。yuv檔案通常是先儲存所有畫素的y分量,再儲存u分量 v分量。在4 2 0取樣格式中...
資料壓縮實驗二bmp to yuv
bmp 全稱bitmap 是windows作業系統中標準影象檔案格式 裝置相關位圖 ddb 和裝置無關位圖 dib 使用非常廣。它採用位對映儲存格式,除了影象深度可選以外,在絕大多數應用中不採用其他任何壓縮。bmp當中資料的色彩空間是rgb。典型的bmp影象由以下四部分組成 1.位圖標頭檔案資料結構...
Hadoop之資料壓縮
壓縮技術能夠有效的減少底層儲存系統 hdfs 讀寫位元組數。壓縮提高了網路頻寬和磁碟空間的效率。在執行mr程式時,i o操作 網路資料傳輸 shuffle和merge要花大量時間,有其是資料規模很大和工作負載密集的情況下,因此,使用資料壓縮顯得非常重要。可以在mapreduce的任意階段啟用壓縮。不...