2010-11-02 33 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