1. 程式人生 > >PPM/PGM/PBM 圖象檔案(thinkvd 開發日誌)

PPM/PGM/PBM 圖象檔案(thinkvd 開發日誌)

PBM支援單色圖(1個畫素位)
PGM支援灰度圖形,能夠讀PBM圖形和PGM圖形,輸出PGM圖形
PPM支援真彩色圖形,可以讀上面所有格式,輸出PPM圖形

PPM圖形檔案格式:
包括兩個部分,頭部分和圖象資料部分。頭部分由三部分組成,這三部分由回車或換行分割,但PPM的
標準中是要求空格。第一行通常是P3或P6,說明是PPM格式;第二行是圖象的寬度和高度,用ASCII
來表示;最後一部分是描述畫素的最大顏色組成,這裡允許描述超過一個位元組(0-255)的顏色值。
另外可以在上面個部分的後面用#來追加註釋,註釋行是從#到該行末。
下面是PPM頭的例子:
例子1:
P6 1024 778 255
例子2:
P6
1024 778
255
例子3:
P6#PPM檔案格式
1024 778#寬度和高度
# 註釋
255

PPM圖象資料的格式依賴於PPM自身的表示,如果是P3格式,資料將以ASCII文字來表示,每個畫素
的值從0到前面的最大值,每行不應該長於70個字元,如下:
例子4:
P3
# example from the man page
4 4
15
 0  0  0    0  0  0    0  0  0   15  0 15
 0  0  0    0 15  7    0  0  0    0  0  0
 0  0  0    0  0  0    0 15  7    0  0  0
15  0 15    0  0  0    0  0  0    0  0  0

如果是P6格式,圖象資料以位元組格式儲存,每個色彩成分(r,g,b)一個位元組。僅僅在頭部的最後一
個欄位的前面才能有註釋,在頭部的最後一個欄位後面通常是一個回車或換行。P6圖象檔案比P3檔案
小,讀起來更快。注意,P6檔案僅僅用作但位元組彩色。

但並沒有按照格式規約的要求來,通常的習慣,圖象從上到下,從左到右被儲存。每個畫素以一個字
節來儲存,0表示黑色,255表示白色。色彩成分按照通常的紅-綠-藍順序愛儲存。

PGM
該格式檔案儲存灰度圖形,也就是這裡每個畫素使用一個值來表示而不是3個(R,G,B)。同PPM唯
一不同的是頭部用P2和P5,分別表示用ASCII和位元組碼來表示資料。
例如:
P2
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

PBM
使用ASCII的0或1方式來表示資料,0表示白色,1表示黑色。與PPM、PGM不同的頭部是少了第三
行,因為第三行的最大色彩值在這個模式下已經沒有意義了;如下:
P1
# PBM example
24 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

/****************************************************/
PPM影象格式

2008-05-05 16:00
今天得知Minolta 3D scans(Konica的一款三維掃描器)的資料是兩部分,一是反映Shape的字尾為.abs檔案,另一個是反映Texture的字尾為.ppm的檔案。下面就是ppm檔案格式的簡介。 PPM灰度檔案:
檔案頭由3行文字組成,可由fgets讀出 1)第一行為“P2",表示檔案型別 2)第二行為影象的寬度和高度 3)第三行為最大的象素值255
接下來是影象資料塊。按行順序儲存。每個象素佔4個位元組,灰度通道為4位元組ASCII碼錶示的整數,
高位元組在前。左上角為座標原點。 16位PPM檔案:(至少適用於讀取由DCRAW生成的PPM檔案)
檔案頭由3行文字組成,可由fgets讀出 1)第一行為“P6",表示檔案型別 2)第二行為影象的寬度和高度 3)第三行為最大的象素值 接下來是影象資料塊。按行順序儲存。每個象素佔6個位元組,依次為紅綠藍通道,每個通道為2位元組整
數,高位元組在前。
PPM彩色檔案: 檔案頭由3行文字組成,可由fgets讀出 1)第一行為“P3",表示檔案型別 2)第二行為影象的寬度和高度 3)第三行為最大的象素值255

接下來是影象資料塊。按行順序儲存。每個象素佔12個位元組,依次為紅綠藍通道,每個通道為4位元組
ASCII碼錶示的整數,高位元組在前。左上角為座標原點。

另轉其他:

ppm檔案的開始為三行ASCII碼文字
第一行是:   P6
第二行是影象的大小,先是列象素數,後是行象素數,中間有一空格,
例如320X240的影象,次行為: 320 240
第三行是一個介於1和65525的整數,當然也是文字的,用來表示
每一個象素的一個分量(如紅,綠,藍)用幾個位元表示, 1-255
表示一個分量用地位元表示.
每一行的結尾一換行或回車或兩者都用表示.

三行文字之後就是影象的資料流,從左到右,從上到下.

如一個320X240的RGB圖象,每分量用8位元表示,
檔案如下:
P6
320 240
255

/****************************************************/



不清楚為什麼在高、寬及顏色值前面都帶3, 可能是它的約定

相關推薦

PPM/PGM/PBM 檔案(thinkvd 開發日誌)

PBM支援單色圖(1個畫素位)PGM支援灰度圖形,能夠讀PBM圖形和PGM圖形,輸出PGM圖形PPM支援真彩色圖形,可以讀上面所有格式,輸出PPM圖形 PPM圖形檔案格式:包括兩個部分,頭部分和圖象資料部分。頭部分由三部分組成,這三部分由回車或換行分割,但PPM的標準中是要

QMessageBox 視窗大小更改問題(thinkvd開發日誌)

      QMessageBox的功能很通用、實用及方便,相信用過Qt的開發者都用過它,但它有一個讓人不友好的地方,就是不能設定視窗的大小,尤其對自定義介面的視窗風格時,不得不考慮這個不便。這個問題在自己參與開發時就意識到,由於當時自己對Qt的認識有限,幾次償試解決都沒有結

qt中資料儲存方法(介面)的思路應用1(thinkvd開發日誌

  <qt中資料儲存方法(介面)的思路>個人最早釋出在qtcn bbs http://www.qtcn.org/bbs/read.php?tid=32483中,可能由於比較理論化而讓人感覺其實際應用意義,今後其有相關的應用會逐步寫出來。     關於載入視訊檔案後

以順其自然的思路寫程式(Thinkvd開發日誌

      有的程式在寫之前都會很好地“研究”一番,講究一些獨特的技巧,但有時可能造成後來的維護者半天看不明白。過去這方面見過,相信也有人遇到過類似的情況。  個人覺得一般程式在不響應功能的情況下應該順其自然,適合常規思維、簡單易維護為目的。 下面以開發中的thinkvd m

dvd 字幕轉換縮放問題 (thinkvd開發日誌)

     問題現象:當一個dvd盤轉換輸出成480*320大小的視訊,輸出的字幕顯得特別大,沒有按輸出尺寸比例縮放。     這個問題造成原因是以前把dvd subtitle stream在avcodec_encode_video前與視訊合併,至於如何單獨用do_subtit

SDL實現overlay方式雙屏顯示的應用流程分析(thinkvd開發日誌)

由於在參與開發 thinkvd video converter 遇到釋放SDL記憶體的問題,應用中需要在預覽、全屏、雙屏及CLIP之間來回切換,再次看了SDL相關的原始碼,把SDL實現的過程簡單說一下。 SDL開發包中自帶的樣例:testsprite2.c中就是一個實現多屏顯

使用ADO GetChunk/AppendChunk 資料庫存取二進位制檔案(如程式,等)

 在設計資料庫的過程中,我們會經常要儲存一些圖形、長文字、多媒體(視訊、音訊檔案)等各種各樣的程式檔案,如果我們在資料庫中僅儲存這些檔案的路徑資訊,儘管這可以大大地減小資料庫的大小,但是由於檔案存在磁碟上,我們除了維護資料庫外還要維護檔案的路徑資訊,保持二者的一致,這對於我們

vue移動音樂app開發學習(三):輪播組件的開發

hub out webapp width eth reat slot utc -1 本系列文章是為了記錄學習中的知識點,便於後期自己觀看。如果有需要的同學請登錄慕課網,找到Vue 2.0 高級實戰-開發移動端音樂WebApp進行觀看,傳送門。 完成後的頁面狀態以及項目結構如

面向對組件開發-拖拽

get sed tin eas cli tel back doc capture <div id="div1"></div> <div id="div2"></div> <div id="div3"></d

內置3D對-Unity3D遊戲開發培訓

tro gpo pan http 攝像機 項目 對象 坐標 scale 內置3D對象-Unity3D遊戲開發培訓 作者:鄧家海 2018-02-12 19:21:58 五大面板: -Hierachy:當前場景中的物體 圖 1-1 -Projec

五 面向對軟件開發

test 要求 維護 面向對象的分析 我們 死磕 解析 也會 改進 很多人在學完了python的class機制之後,遇到一個生產中的問題,還是會懵逼,這其實太正常了,因為任何程序的開發都是先設計後編程,python的class機制只不過是一種編程方式,如果你硬要拿著clas

像識別DM8127開發攻略——UBOOT的移植說明

DM8127 開發攻略 UBOOT移植 圖像識別 圖像識別DM8127開發攻略——UBOOT的移植說明 根據前幾篇文章的介紹,想必大家對DM8127軟件架構有了全局的認識,下面我們從開發的角度進行裁剪移植最基本的BOOT軟件包,嵌入式開發人員拿到一個新的板子,就是要如何讓板子能跑得起自己編譯和

像識別DM8127開發攻略——KERNEL的移植說明

DM8127開發攻略 內核kernel移植 圖像識別 圖像識別DM8127開發攻略——KERNEL的移植說明 接上一篇《圖像識別DM8127開發攻略——UBOOT的移植說明》的步伐,DM8127開發攻略最後一篇文章是有關Kernel的裁剪移植。基於

.NET Core開發日誌——視與頁面

代碼 核心 tel await got 實現類 name world! 對象 當一個Action完成它的任務後,通常需要返回一個實現IActionResult的對象,而最常見的就是View或者ViewResult,所謂的視圖對象。那麽視圖與最終所看到的頁面之間的聯系又是怎樣

《數字影象處理》第三講——基本運算與灰度對映變換

雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 目錄 3.1影象的運算 3.2基於灰度變換的影象增強 3.3直方圖處理

如何在安卓原生專案中加入mui相關檔案進行開發(使用新版本5+SDK建立最簡Android原生工程(Android studio))

緣起 最近在搭一個android開發的demo,專案使用androidstudio作為開發工具,使用混合式開發,途中需要整合mui.但是網上找了很多教程都是老版本的,以至於MUI官網提供的demo已經不符合教程了。後來進過多方努力終於找到了新版的教程,特此記錄。 新版教程連結點這

數字訊號處理各種處理及

https://wenku.baidu.com/view/b1bb67f1f90f76c661371a75.html?sxts=1544696459935 https://wenku.baidu.com/view/4380c3b23868011ca300a6c30c2259010302f363.

OpenCV中cvResize函式放縮

                影象大小變換void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );src:輸入影象. dst:輸出影象. interpolation:差值方法: • CV_INTER_N

java applet 利用控制檯輸出

首先我們在同一個資料夾下寫好HTML和Java檔案(這裡以書上《微笑的人》為例) HTML檔案:smilepeople.html <applet code="smilepeople.class" width=400 height=300> </app

OpenCV孔洞內輪廓填充

                   影象內輪廓填充通常稱為孔洞填充,主要用於目標提取。不帶任何條件的內輪廓填充,在目標密度很大時,可能導致錯誤填充。一種典型情況,當多個目標粘連,並 且形成環狀時,簡單的內輪廓填充會將環狀內部背景部分誤認為目標空洞進行錯誤填充。這種錯誤對於目標分割和提取是非常致命的。  如果