圖像是怎樣通過代碼,保存到我們的計算機的。在之前圖像的載入中,我們只是通過一句簡單的代碼 "cv.imread" 便實現(xiàn)了,表面上看上去非常簡單,只需一步便能實現(xiàn),但當(dāng)我們更深層次地去挖掘時,實際上是經(jīng)歷了四個過程。
第一個是文件的讀取,第二個是文件封裝格式的解析,第三個是文件數(shù)據(jù)的解碼,第四個是數(shù)據(jù)的加載,總共有這樣四個過程。而直觀上看只有第一個和第四個過程,沒有中間兩個過程,這是因為中間兩個過程在程序內(nèi)部就已經(jīng)幫我們完成了。
在這里涉及到兩個基礎(chǔ)概念,一個是封裝格式,另一個是數(shù)據(jù)解碼。我們先來看看什么是封裝格式。我們?nèi)粘I钪薪?jīng)常接觸到的 jpg、png 等文件格式就是這里所說的圖像的封裝格式。而封裝格式一般又把圖像文件分成兩部分,第一部分是文件頭,第二部分是文件數(shù)據(jù),不同的封裝格式的文件頭和文件數(shù)據(jù)是完全不同的。
而且這里的文件數(shù)據(jù)也不是圖像的原始數(shù)據(jù),而是圖像進行壓縮編碼之后的數(shù)據(jù)。文件頭多數(shù)描述的是數(shù)據(jù)部分的解碼信息以及附加信息,解碼器可以根據(jù)這些附加信息將文件數(shù)據(jù)恢復(fù)到圖像的原始數(shù)據(jù),所以這個過程非常的重要。
到這里,我們已經(jīng)了解了文件的封裝格式,接下來我們就可以根據(jù)自己需要的圖片格式完成圖片的保存功能了。
想要完成一張圖像的保存,第一步便是要載入一張圖像,這一步我們在之前的文章當(dāng)中已經(jīng)實現(xiàn)過了,非常簡單。在這里我們使用Python 和C兩種語言來實現(xiàn),Python 使用的是Pycharm編程軟件,C使用的是VS編程軟件。下面我們就來看看Python 語言和 C語言分別是怎樣實現(xiàn)的吧!
這兩種語言的代碼是不是很相似呀!我們只要了解其中一種代碼,另一種也就大同小異了。
接下來,我們就一起來看看圖像究竟是怎樣保存的吧。圖像的保存也非常簡單,一句代碼便可實現(xiàn)。先來看看效果如何,同樣使用 Python 和 C兩種語言來實現(xiàn)。
對于 imwrite 命令,有兩個參數(shù),第一個是圖片的保存路徑、名稱以及格式類型,第二個參數(shù)就是圖像數(shù)據(jù)了,這里的數(shù)據(jù)指的是經(jīng)過解碼之后的數(shù)據(jù)。通過這個實例,我們不難看出,保存的類型不同,在默認情況下所占用的空間大小也相差較大,這也同時體現(xiàn)了我們上面所說的不同封裝格式的文件頭和文件數(shù)據(jù)完全不同。
對于C 語言,使用窗體函數(shù),實現(xiàn)簡單的交互界面,這樣在讀取圖像和保存圖像的時候非常方便。