2010-11-02 34 views
1

我想讀取一個8位灰度bmp文件,重建它的像素矩陣,然後用sobel算子處理它。然而,程序不能構建像素矩陣,它會分割原始的隱藏塊。當我像這樣運行程序時,
./sobel cube.bmp output.bmp processed.bmp output.txt的
cube.bmp是輸入 output.bmp是構成像素矩陣的輸出。 proccessed.bmp是用sobel算子處理的輸出。
Code and Sample photos
閱讀8bit灰度bmp文件的問題c

+0

我懷疑答案在於'Print'的輸出,這是您唯一沒有向我們顯示的東西。 – 2010-11-02 17:26:13

回答

1

一對夫婦的意見:

processed.bmp有一個不正確的行大小或像素大小寫的位圖的外觀。你可以知道,因爲每一行都是水平移動的。

您正在處理灰度位圖,但你正在讀取和寫入像素,雖然他們有RGB分量,即:

pixelArray[i][j].red = pixel.red; 
pixelArray[i][j].green = pixel.green; 
pixelArray[i][j].blue = pixel.blue; 

灰度像素僅僅是一個8位值。

+0

我試過只有一個unsigned char值的PIXEL結構。沒有任何變化,總是相同的結果 – anarhikos 2010-11-02 17:56:25

+0

訪問RGB像素可能不是你唯一的問題,但它是一個問題。你也應該看看你的讀/寫循環 - 確保你不會離開你分配的數組的一端。順便提一下,您可能會考慮將所有數組分配爲單個指針而不是單獨分配的指針數組。 – Seth 2010-11-02 18:10:16

+0

此外,您也可以嘗試簡單地讀取位圖並輸出相同的位圖。一旦工作,然後返回並添加代碼以應用Sobel操作符。 – Seth 2010-11-02 18:12:37

2

可能不是你正在尋找的答案,但看看openCV。

假設你對圖像處理步驟沒有特別的BMP操作感興趣,這個庫負責所有的文件I/O,顯示等。它也有一個很好的sobel過濾器。

+0

在這裏使用OpenCV好像使用土星火箭爬樹。 – Seth 2010-11-02 18:10:41

+0

@seth - true,但如果OP對圖像過濾器感興趣,那麼搞亂BMP標頭對齊就好像設計自己的梯子來爬樹一樣;-) – 2010-11-02 21:29:10