資料壓縮第三次作業 RGB檔案的讀取

2021-10-03 17:07:35 字數 3842 閱讀 7638

讀入乙個24bitrgb檔案(以down.rgb為例,其解析度為256*256),輸出該資料檔案中r、g、b三個分量(各8bit表示)的概率分布示意圖和熵。

#include

#include

#include

#include

intmain()

else

err=

fopen_s

(&pbsat,

"b_sat.txt"

,"w");

if(err ==0)

else

err=

fopen_s

(&pgsat,

"g_sat.txt"

,"w");

if(err ==0)

else

err=

fopen_s

(&prsat,

"r_sat.txt"

,"w");

if(err ==0)

else

//buffer malloc

unsigned

char

* buffer =

null

; buffer=

(unsigned

char*)

malloc

(sizeof

(unsigned

char)*

3* width *

height);if

(null

!= buffer)

else

//fread

fread

(buffer,

sizeof

(unsigned

char),

3* width * height, photo)

;//measure

//分成三基色儲存

unsigned

char b[width * height]=;

unsigned

char g[width * height]=;

unsigned

char r[width * height]=;

int pb =0;

int pg =0;

int pr =0;

for(

int i =

0; i <

3*width*height; i++

)else

if(i %3==

1)else

if(i %3==

2)}if

(pb == width *height && pg == width * height && pr == width * height)

else

//計算頻率

int numb[

256]=;

for(

int i =

0; i <

256;i++)}

}double freqb[

256]=;

for(

int i =

0; i <

256;i++

)int numg[

256]=;

for(

int i =

0; i <

256;i++)}

}double freqg[

256]=;

for(

int i =

0; i <

256;i++

)int numr[

256]=;

for(

int i =

0; i <

256;i++)}

}double freqr[

256]=;

for(

int i =

0; i <

256;i++

)//計算夏農熵

double hb =0;

double hg =0;

double hr =0;

for(

int i =

0; i <

256;i++)if

(freqg[i]!=0

)if(freqr[i]!=0

)}printf

("b基色的夏農熵是%f\n"

,hb)

;printf

("g基色的夏農熵是%f\n"

, hg)

;printf

("r基色的夏農熵是%f\n"

, hr)

;//fwrite

fprintf

(pbsat,

"symbol\tfreq\n");

for(

int i =

0; i <

256;i++

)fprintf

(pgsat,

"symbol\tfreq\n");

for(

int i =

0; i <

256;i++

)fprintf

(prsat,

"symbol\tfreq\n");

for(

int i =

0; i <

256;i++

)//free malloc

free

(buffer)

;//fclose

fclose

(photo)

;fclose

(pbsat)

;fclose

(pgsat)

;fclose

(prsat)

;printf

("檔案關閉!\n");

//system pause

system

("pause");

return0;

}

在visual studio 2019中執行上述**,可以得到一下結果:

ps:上述**有幾個要注意的點

1.目標檔案down.rgb要和原始檔cpp放在同一路徑中。

2.在vs2019中,使用fopen_s代替fopen,相應的使用方法也不一樣

3.計算freq時,因為要做除法,所以要把int型資料轉為double型,否則結果會都變為0

使用excel開啟生成的txt檔案,框選相應的資料,繪製條形圖,可以得到以下結果:

matlab自帶的讀取檔案函式和繪圖函式可以非常簡介的完成讀取檔案資料以及繪製精美影象的操作。

例如在c中十分複雜、需要占用大量篇幅的讀取檔案操作,在matlab中可以僅用三行**實現將rgb檔案的資料儲存到矩陣a中,然後進行後續的作圖處理

資料壓縮第三次作業

作業3 讀入乙個24bitrgb檔案 以down.rgb為例,其解析度為256 256 輸出該資料檔案中r g b三個分量 各8bit表示 的概率分布示意圖 類似下圖 和熵。matlab clc close all clear all file1 fopen down.rgb x fread fil...

第三次作業

2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...

第三次作業

1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...