作業3:讀入乙個24bitrgb檔案(以down.rgb為例,其解析度為256*256),輸出該資料檔案中r、g、b三個分量(各8bit表示)的概率分布示意圖(類似下圖)和熵。
開闢3個width*height的unsigned char型陣列;開啟要讀出的rgb檔案(以「rb」方式開啟),開啟3個要輸出的資料統計檔案(以「w」方式開啟,可命名為r_sat.txt等);將rgb資料從rgb檔案中讀出,並分別儲存到3個陣列中,期間計算資料的概率分布和熵,並將這些資料寫入3個資料統計txt檔案中。txt檔案的寫入方式如下所示(每行的兩個資料用tab分開)。在excel裡將這3個txt檔案開啟即可生成統計圖。
**如下:
#include
"pch.h"
#include
intmain()
fread
(buffer,
sizeof
(unsigned
char
), width*height*
3, fp)
;//將rgb檔案中的資料讀至buffer指向的動態空間
unsigned
char b[width*height]=;
unsigned
char g[width*height]=;
unsigned
char r[width*height]=;
int i;
int j;
/*for (i = 0; i < width*height; i++)
*///用微控制器的方法寫崩了-__-||
for(i =
0; i < width*height; i++
)int numr[
256]=;
double freqr[
256]=;
for(i =
0; i <
256; i++)}
freqr[i]
=double
(numr[i])/
(width * height);}
//printf("%f", freqr[1]);
int numg[
256]=;
double freqg[
256]=;
for(i =
0; i <
256; i++)}
freqg[i]
=double
(numg[i])/
(width * height);}
int numb[
256]=;
double freqb[
256]=;
for(i =
0; i <
256; i++)}
freqb[i]
=double
(numb[i])/
(width * height);}
//計算熵
double hr=0;
for(i =
0; i <
256; i++)}
double hg=0;
for(i =
0; i <
256; i++)}
double hb=0;
for(i =
0; i <
256; i++)}
printf
("r的熵為:%f\n"
, hr)
;printf
("g的熵為:%f\n"
, hg)
;printf
("b的熵為:%f\n"
, hb)
;fprintf
(fr,
"%s\t%s\n"
,"symbol"
,"frequent");
for(i =
0; i <
256; i++
)fprintf
(fg,
"%s\t%s\n"
,"symbol"
,"frequent");
for(i =
0; i <
256; i++
)fprintf
(fb,
"%s\t%s\n"
,"symbol"
,"frequent");
for(i =
0; i <
256; i++
)free
(buffer)
;fclose
(fp)
;fclose
(fr)
;fclose
(fg)
;fclose
(fb)
;system
("pause");
return0;
}
結果:
r分量概率分布
g分量概率分布
b分量概率分布
執行結果
RGB檔案的處理與分析
所給rgb檔案是按照b,g,r順序排列的且去掉了包含檔案屬性的檔案頭,檔案解析度為256 256 256 times256 256 25 6。該段 可以實現如下功能 由於c 作圖不方便,於是圖表均為excel完成。include include include include using names...
資料壓縮 作業三(讀取RGB檔案)
1 乙個24bit的rgb檔案,每個畫素點可分為r g b三個分量,則這個檔案可分為3個8bit的檔案。2 解析度為256 256,則乙個r g b檔案資料量為256 256,設為常量size 而乙個24bit的rgb檔案資料量為256 256 3,設為常量buffsize。3 根據不同檔案的資料量...
rgb格式檔案的Python讀取 格式轉換
rgb檔案是不太常見的格式檔案,一般的影象庫 opencv pil 都無法直接讀取。網上的資料也比較少,最後無意間試出一種方法,在這裡記錄一下。c 方法類似,但是人生苦短,我用python import cv2 as cv import numpy as np f open 00000.rgb rb...