[圖像格式]BMP圖像格式

本文介绍了将BMP图像转换为灰度图的MATLAB程序,并详细解释了程序中涉及的BMP图像格式、颜色模式、数据记录方式等关键概念。同时,针对程序在更新颜色数据后遇到的问题进行了分析,提供了可能的解决方案。

BMP圖像格式包括四部分:

1.位圖文件頭(BitMapFileHeader):文件標識BM+文件大小+保留字+偏移量(三部分的大小+保留字)=14B

2.位圖信息頭(BitMapInfoHeader):

3.顏色表:記錄圖像用到的所有顏色信息

  說明:1.常見的顏色模式有2,16,256,以及24位真彩圖和32位

     2.每個顏色用4個字節(Byte)表示,上述的模式各需要8B,64B,1024B,2^26B,2^34B

     3.每種顏色對應一個顏色的索引值,按照順序依次排列,分別為0,1,2,3....;這個顏色的索引值在圖像數據區會用到,用來指示每一個像素點的顏色

4.圖像數據區:在這個部分記錄每一個像素點的顏色信息(通過上面的顏色索引值).

  說明:1.對於2色每點佔據一位(0/1),16色的每個像素點需要4位(如15=1111),以此類推

     2.圖像是以字節來記錄顏色信息的,並且顯示的字節數必須是4的整數倍;  

     3.會有某種顏色模式,比如說16色,出現1個字節對應兩個像素點的情況,對於19寬(指的是字節)的圖像,那麼最後一個像素點只用了半個字節,這時需要在後面補上00填補

               但這部分是沒有的,這會使記錄的信息大於實際的圖像信息;

     4.由於2的限制,對於圖像寬度並不是4的整數倍的,需要在後面補上00,知道滿足2;

     5.注意3和4補上00的區別,3指的是"像素點顏色表示"與"特定顏色模式下索引值"的對應,4指的是"顯示的要求"與"每行字節數"的對應.

 

附上一個將BMP圖像轉成灰度的matlab程序,參考至(http://blog.youkuaiyun.com/xiaofengsheng/article/details/5993815)

%讀取BMP,並將BMP轉化為灰度圖
%格式:BMPReader('圖像路徑')
function BMPReader(strPathName)
fFile = fopen(strPathName, 'rb');
[data, count] = fread(fFile);
data_set=reshape(data,2,count/2);
data_Set=data_set';%BMP的數據
I=imread(strPathName);

%offset偏移
nOffset = 0;
for i = 1:4
    nOffset = nOffset + bitshift(data(10+i), (i-1)*8);
end
 
%width圖像寬度
nWidth = 0;
for i = 1:4
    nWidth = nWidth + bitshift(data(18+i), (i-1)*8);
end
 
%height圖像高度
nHeight = 0;
for i = 1:4
    nHeight = nHeight + bitshift(data(22+i), (i-1)*8);
end
    
%bit count
nBitCount = data(29) + bitshift(data(30), 8);

img = zeros(nWidth,nHeight);
gray=zeros((count-nOffset)/3,1);
%將RGB取平均,輸出灰度值
for j=1:(count-nOffset)/3
res=sum(data(nOffset+1+(j-1)*3:nOffset+3+(j-1)*3))/3;
gray(j)=floor(res);
end
%nOffset代表偏移量,從55B後面的數據才是圖像數據,
%reshape是列優先,所以img設為(W,H),下面在轉置還原
% bmp格式存储是从图片的下到上,先转置,然后上下交换
img = reshape(gray, nWidth, nHeight);
img = flipud(img'); 
subplot(211)
imshow(I),title('原圖');
subplot(212)
imshow(img, [0, 255]),title('灰度圖')
%close file
fclose(fFile);
%問題:
%這個程序只是將BMP圖像的數據提取做平均,直接將這個提取出來的值作為灰度呈現
%沒有將這個數值寫入原BMP矩陣
%試圖更新BMP數據后,寫入更新沒有成功;或者寫入后圖像全白??不明白更新
%顏色數據后怎麼顯示或者存儲為圖像
%另外對BMP的顏色存儲不是很明白,既然不是三維矩陣,怎麼顯示RGB?

 

转载于:https://www.cnblogs.com/waynever/p/4348487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值