颜色空间,图像格式,彩色转灰度函数

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
rgb颜色空间

灰度图像是一个特殊的彩色图像,r=g=b,如图


所以,要将彩色图像转化为灰度图像,只需令每个像素的r=g=b=x即可.而x等于多少,视不同情况而定。
补充:
黑色 r=0 g=0 b=0
白色 r=255 g=255 b=255

黑色物体之所以是黑色,是因为它吸收了所有的可见光,所以看上去是黑的,
而相反,白色物体反射了所有可见光,而所有可见光组合成白色,所以看上去是白的。

绿色的物体之所以是绿色,是因为它的表面分子、原子的特点是吸收其他颜色能力强,却不怎么吸收绿色光,才显绿色的。

//读取一个彩色图像
>> I=imread('lena.jpg');
>> whos I
  Name      Size                   Bytes  Class

  I       512x512x3               786432  uint8 array

Grand total is 786432 elements using 786432 bytes
//分别取r,g,b各个分量
>> r=I(:,:,1);
>> g=I(:,:,2);
>> b=I(:,:,3);
>> whos r
  Name      Size                   Bytes  Class

  r       512x512                 262144  uint8 array

Grand total is 262144 elements using 262144 bytes

>> whos g
  Name      Size                   Bytes  Class

  g       512x512                 262144  uint8 array

Grand total is 262144 elements using 262144 bytes

>> whos b
  Name      Size                   Bytes  Class

  b       512x512                 262144  uint8 array

Grand total is 262144 elements using 262144 bytes
//将源图像和三个分量的图像显示出来
>> subplot(1,4,1);imshow(I);title('I')
>> subplot(1,4,2);imshow(r);title('r')
>> subplot(1,4,3);imshow(g);title('g')
>> subplot(1,4,4);imshow(b);title('b')


matlab有一个函数可以直接取灰度图像,rgb2gray。其实它是取r,g,b和的均值计算gray的。验证如下
>> gray=rgb2gray(rgb);
>> whos gray
  Name       Size                   Bytes  Class

  gray     512x512                 262144  uint8 array
>> figure(2);subplot(1,2,1);imshow(gray);title('rgb2gray')
//用r,g,b平均值组成一个灰度图像
>> r=double(r);g=double(g);b=double(b);
>> average=(r+g+b)/3;
>> average=uint8(average);
>> whos average
  Name          Size                   Bytes  Class

  average     512x512                 262144  uint8 array
>> figure(2);subplot(1,2,2);imshow(average);title('average')

//显示的图像如下

直接观察图像的数据,像素值大致差不多的。
>> gray(1,:)

ans =

  Columns 1 through 25 

   162   161   161   160   162   156   163   162   165   161   162   160   154   165   158   154   159   153   162   161   152   156   157   156   154

>> average(1,:)

ans =

  Columns 1 through 25 

   163   162   162   161   163   157   163   162   165   161   162   160   153   164   158   152   157   151   161   159   150   154   153   154   153

可以将r,g,b三个分量再次组合成一个彩色rgb图像
rgb=cat(3,r,g,b)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
YUV颜色空间

是欧洲电视系统采用的一种颜色编码方法。Y亮度,U,V色差。
rgb2yuv
function yuv = rgb2yuv(rgb)
% yuv = rgb2yuv(rgb)把一幅RGB图像转换为YUV图像,
% 输入图像是一个彩色像素的M×N×3的数组,
% 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。
% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。
% 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。
%
% 输出YUV图像是uint8。
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);

% 执行转换函数
y = 0.299*r + 0.587*g + 0.114*b;
u = 0.567*(b - y);
v = 0.713*(r - y);

% 防止溢出
if(y < 0)
    y = 0;
end;
if(y > 1.0)
    y = 1.0;
end;
if(u < 0)
    u = 0;
end;
if(u > 1.0)
    u = 1.0;
end;
if(v < 0)
    v = 0;
end;
if(v > 1.0)
    v = 1.0;
end;
    
% 联合yuv,并转成uint8类型
y = y*255;
u = u*255;
v = v*255;
yuv = cat(3, y, u, v);
yuv = uint8(yuv);
rgb=imread('lena.jpg');
subplot(1,2,1);imshow(rgb);title('rgb');

yuv=rgb2yuv(rgb);
subplot(1,2,2);imshow(yuv);title('yuv');

//观察h,s,i分量值,与r,g,b有很大不同。
>> y=hsi(:,:,1);
>> y(1,:)

ans =

  Columns 1 through 27 

   162   161   161   160   162   156   163   162   165   161   162   160   154   165   158   154   159   153   162   161   152   156   157   156   154   156   154
...
>> u=hsi(:,:,2);
>> u(1,:)

ans =

  Columns 1 through 27 

     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
...
>> v=hsi(:,:,3);
>> v(1,:)

ans =

  Columns 1 through 27 

    44    44    44    44    45    45    47    47    47    47    45    45    44    44    44    44    44    43    45    44    45    45    46    47    47    47    47
...


//观察y,u,v图像
subplot(1,3,1);imshow(y);title('y');  
subplot(1,3,2);imshow(u);title('u');  
subplot(1,3,3);imshow(v);title('v');



yuv2rgb
function rgb = yuv2rgb(yuv)
% yuv = rgb2yuv(rgb)把一幅RGB图像转换为YUV图像,
% 输入图像是一个彩色像素的M×N×3的数组,
% 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。
% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。
% 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。
%
% 输出YUV图像是uint8。
yuv = im2double(yuv);
y = yuv(:, :, 1);
u = yuv(:, :, 2);
v = yuv(:, :, 3);

% 执行转换函数
r = y + 1.402*v;
g = y - 0.344*u - 0.714*v;
b = y + 1.772*u;

% 防止溢出
if(r < 0)
    r = 0;
end;
if(r > 1.0)
    r = 1.0;
end;
if(g < 0)
    g = 0;
end;
if(g > 1.0)
    g = 1.0;
end;
if(b < 0)
    b = 0;
end;
if(b > 1.0)
    b = 1.0;
end;
    
% 联合rgb
r = r*255;
g = g*255;
b = b*255;
rgb = cat(3, r, g, b);
rgb = uint8(rgb);

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
关于图像格式

bmp和jpg的比较
lena_bmp=imread('lena.bmp');%读取lena.bmp
imwrite(lena_bmp,'lena.jpg');%生成lena.jpg
lena_jpg=imread('lena.jpg');%读取lene.jpg

//观察变量
>> whos lena_bmp
  Name           Size                   Bytes  Class

  lena_bmp     512x512x3               786432  uint8 array

Grand total is 786432 elements using 786432 bytes

>> whos lena_jpg
  Name           Size                   Bytes  Class

  lena_jpg     512x512x3               786432  uint8 array

Grand total is 786432 elements using 786432 bytes

//观察图像,lena,jpg占用磁盘空间要远小于lena.bmp.
>> imfinfo 'lena.bmp'

ans = 

              Filename: 'lena.bmp'
           FileModDate: '05-Apr-2012 11:39:48'
              FileSize: 786486
                Format: 'bmp'
         FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
                 Width: 512
                Height: 512
              BitDepth: 24
             ColorType: 'truecolor'
       FormatSignature: 'BM'
    NumColormapEntries: 0
              Colormap: []
               RedMask: []
             GreenMask: []
              BlueMask: []
       ImageDataOffset: 54
      BitmapHeaderSize: 40
             NumPlanes: 1
       CompressionType: 'none'
            BitmapSize: 786432
        HorzResolution: 0
        VertResolution: 0
         NumColorsUsed: 0
    NumImportantColors: 0

>> imfinfo 'lena.jpg'

ans = 

           Filename: 'lena.jpg'
        FileModDate: '05-Apr-2012 11:45:50'
           FileSize: 38916
             Format: 'jpg'
      FormatVersion: ''
              Width: 512
             Height: 512
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
            Comment: {}


bmp文件格式挖掘
http://blog.csdn.net/o_sun_o/article/details/8351037
将lena.bmp以二进制形式打开,比如用ida,如下
,摘抄一部分
seg000:00000000  42 4D 36 00 0C 00 00 00-00 00 36 00 00 00 28 00 "BM6......6...(."
seg000:00000010  00 00 00 02 00 00 00 02-00 00 01 00 18 00 00 00 "............"
seg000:00000020  00 00 00 00 0C 00 00 00-00 00 00 00 00 00 00 00 "..............."
seg000:00000030  00 00 00 00 00 00 38 13-51 3A 15 53 44 22 62 3D "......8Q:SD"b="
seg000:00000040  1B 5B 40 20 61 35 15 56-3B 18 5B 41 1C 60 48 23 "[@ a5V;[A`H#"
seg000:00000050  67 42 1B 5F 3D 17 59 3F-19 5B 45 20 60 42 1D 5D "gB_=Y?[E `B]"
seg000:00000060  5C 3B 78 6E 58 92 7E 80-B0 A1 B0 D7 A9 BB D8 AA "\;xnX拁€啊白┗鬲"
seg000:00000070  BD D8 AD BC DC B0 BF E0-AF BF DC B0 C0 DD AB C0 "截馨苦馨垒"
seg000:00000080  DB A8 BD D9 A1 B9 D7 A3-BA DA 96 B1 D3 8F A8 D0 "郇劫」祝黑柋訌ㄐ"
seg000:00000090  7E 94 C8 58 64 A6 54 52-9E 58 50 A7 5D 5D BB 61 "~斎XdR瀀P]籥"
seg000:000000A0  67 CA 5A 67 CF 60 71 D8-6C 81 E4 71 87 E6 71 8C "g蔤g蟕q豯佷q囨q?
seg000:000000B0  E3 72 8F E4 6F 8F E2 7A-9C EF 76 9A E8 83 A5 F1 "鉹忎o忊z滐v氳儱?
seg000:000000C0  82 A2 EB 85 A3 EA 82 A3-EC 81 A2 EB 81 A1 E8 81 "偄雲j偅靵㈦仭鑱"
seg000:000000D0  A1 E8 82 A5 E9 81 A4 ED-80 A4 F2 7E A3 F3 75 9B "¤偉閬ろ€を~su?
seg000:000000E0  E9 7F A2 EC 83 9C E6 81-8E DA 6D 68 BD 45 33 86 "?㈧儨鎭広mh紼3?
seg000:000000F0  60 45 8F 6C 48 8E 52 2C-6E 4A 21 64 43 20 60 52 "`E弆H嶳,nJ!dC `R"
seg000:00000100  2F 6F 41 1F 5C 3C 13 51-40 12 54 41 0E 52 3C 0D "/oA\<Q@TAR<
"
seg000:00000110  51 3C 0F 54 3F 1B 5D 47-25 66 55 34 71 45 20 5E "Q<T?]G%fU4qE ^"
seg000:00000120  36 0D 47 3B 0F 4C 4A 20-5D 59 30 6E 42 18 59 3F "6
G;LJ ]Y0nBY?"
seg000:00000130  15 56 5D 32 75 59 2E 71-4D 24 68 68 3F 83 46 1D "V]2uY.qM$hh?僃"
seg000:00000140  61 51 28 6C 52 28 6F 5B-31 78 57 2D 74 4C 22 69 "aQ(lR(o[1xW-tL"i"
seg000:00000150  53 29 70 5C 30 75 59 2E-71 65 3A 7B 57 29 6B 4E "S)p\0uY.qe:{W)kN"
seg000:00000160  1D 61 4C 1A 60 55 22 66-66 33 6F 84 51 8D 7C 4A "aL`U"ff3o凲峾J"
seg000:00000170  8A 5B 2E 66 9F 7D 9C B1-92 B1 6C 48 7C 49 24 64 "奫.f焳湵挶lH|I$d"
seg000:00000180  3E 1C 5D 47 1E 61 61 30-74 62 2D 70 36 0B 4A 48 ">]Gaa0tb-p6JH"
seg000:00000190  1A 5C 51 1C 66 54 1C 67-5F 34 73 83 5C 93 83 60 "\QfTg_4s僜搩`"
seg000:000001A0  8C 84 5F 8D 4C 1D 55 3E-0F 4E 41 18 56 65 3B 7C "寗_峀U>NAVe;|"
seg000:000001B0  64 37 76 65 30 73 60 2A-6F 61 2B 70 57 27 69 90 "d7ve0s`*oa+pW'i?
seg000:000001C0  61 99 AB 76 A1 9B 65 90-7A 47 81 52 1F 62 48 19 "a櫕ve恴G丷bH"
seg000:000001D0  58 55 28 60 95 6F 93 AB-87 AB 6B 4B 7C 5F 3D 79 "XU(`昽摣嚝kK|_=y"
seg000:000001E0  41 18 56 38 0A 4C 4B 1C-5A 4F 1D 5D 44 15 54 3E "AV8
LKZO]DT>"
seg000:000001F0  0D 51 46 1A 5D 43 16 5B-5A 2F 72 52 27 6A 5E 34 "
QF]C[Z/rR'j^4"
seg000:00000200  75 65 3B 7C 52 28 65 57-2D 6A 56 29 68 49 1C 5B "ue;|R(eW-jV)hI["
seg000:00000210  3C 0D 4C 4F 20 5F 46 1B-5C 49 1D 58 61 39 69 8B "<
LO _F\IXa9i?
seg000:00000220  5B 8F 7E 45 89 4F 17 60-37 0C 4F 4C 27 65 72 49 "[弤E塐`7OL'erI"
seg000:00000230  86 77 50 8E 51 2F 70 5A-39 7C 87 65 A1 64 40 86 "唚P嶲/pZ9|噀@?
seg000:00000240  42 1E 78 36 16 7B 45 2C-8E 45 32 93 43 31 94 41 "Bx6{E,嶦2揅1擜"
seg000:00000250  33 98 41 35 99 3B 30 98-4A 41 A9 43 39 A4 44 3B "3楢5?0楯A〤9;"
seg000:00000260  A9 41 37 A9 44 3E AF 4A-43 B6 46 43 B7 48 45 B9 "〢7〥>疛C禙C稨E?
seg000:00000270  49 49 BD 47 47 BD 4C 4C-C2 48 47 BF 4E 4C C4 4D "II紾G絃L翲G縉L腗"
seg000:00000280  4B C3 4D 4B C3 5A 58 D0-51 50 C8 57 56 CE 51 52 "K肕K肸X蠶P萕V蜵R"
seg000:00000290  CA 57 58 D0 52 58 CF 4B-51 C8 4E 56 CD 53 5B D2 "蔠X蠷X螷Q萅V蚐[?
seg000:000002A0  4D 57 CD 52 5C D2 50 59-CE 51 5A CF 53 5C D1 57 "MW蚏\襊Y蜵Z蟂\裌"
seg000:000002B0  5E D3 59 60 D3 5C 61 D4-5E 62 D3 5E 62 D3 58 5B "^覻`覾a証b觀b覺["
seg000:000002C0  CE 5A 5D D0 58 5C D2 57-5B D1 54 5C D3 57 5F D6 "蝂]蠿\襑[裈\覹_?
seg000:000002D0  56 5E D7 52 5A D3 57 5E-D3 57 5E D3 59 5D D3 5A "V^識Z覹^覹^覻]覼"
seg000:000002E0  5E D4 5B 5F D5 5D 61 D7-5E 63 D6 5E 63 D6 5A 62 "^訹_誡a譤c謂c諾b"
seg000:000002F0  D3 5D 65 D6 5B 65 D7 5E-67 DC 56 60 D5 59 62 DB "覿e諿e譤g躒`誝b?
seg000:00000300  58 60 DB 57 5F DB 55 5E-DD 54 5D DC 56 60 DC 56 "X`踂_踀^軹]躒`躒"
seg000:00000310  60 DC 5D 66 DF 5F 68 E1-5D 65 DC 61 69 E0 61 68 "`躚f達h醈e躠i郺h"
seg000:00000320  DD 5D 64 D9 5C 63 D8 5F-66 DB 5C 64 DB 58 60 D7 "輂d賊c豞f踈d踃`?
seg000:00000330  5A 62 DB 60 67 E2 5C 64-DF 5C 64 E0 59 60 DB 5E "Zb踐g鈂d運d郰`踍"
seg000:00000340  65 E0 5F 64 DE 62 67 E1-62 66 DD 69 6D E4 67 69 "e郷d辀g醔f輎m鋑i"
seg000:00000350  DF 66 68 DE 65 69 DF 67-6B E1 66 6D E2 63 6A DF "遞h辝i遟k醘m鈉j?
seg000:00000360  60 69 DE 63 6A DF 64 6C-DD 6C 72 E3 6B 71 E2 66 "`i辌j遜l輑r鉱q鈌"
seg000:00000370  6C DD 6A 71 E0 6E 75 E4-6A 71 DE 65 6C D9 68 6F "l輏q鄋u鋔q辝l賖o"
seg000:00000380  DC 69 70 DD 6A 71 DE 67-6E DB 68 6F DE 68 6F DE "躨p輏q辡n踙o辢o?
seg000:00000390  66 6D DC 6D 76 E5 66 71-E0 65 72 E0 66 71 E0 67 "fm躮v錰q鄀r鄁q鄃"
seg000:000003A0  72 E1 67 73 DF 68 74 E0-67 73 DF 67 73 DF 6C 76 "r醙s遠t鄃s遟s遧v"
seg000:000003B0  E1 6D 77 E2 6D 78 E0 6C-77 DF 6D 78 E0 6F 7A E2 "醡w鈓x鄉w適x鄌z?
seg000:000003C0  6E 7A E0 6B 77 DD 6A 79-DD 69 78 DC 6A 78 DE 6B "nz鄈w輏y輎x躩x辦"
seg000:000003D0  79 DF 6B 79 DF 6B 79 DF-6C 7A E0 6C 7A E0 6F 7B "y遦y遦y遧z鄉z鄌{"
seg000:000003E0  E1 6E 77 DE 6E 77 DE 74-7B E2 76 7B E1 73 78 DE "醤w辬w辴{鈜{醩x?
seg000:000003F0  74 79 DF 77 80 E2 78 87-E3 71 83 DC 7A 8C E5 6D "ty遷€鈞囥q冘z屽m"
seg000:00000400  7F D8 70 82 DD 73 85 E0-70 81 DE 71 82 DF 74 83 "豴傒s呧p佫q傔t?
seg000:00000410  DF 78 86 DF 7D 8B E3 7A-87 DD 82 8E E0 81 8D DF "選嗊}嬨z囕値鄟嵾"
seg000:00000420  86 92 E0 82 8E DC 81 8E-DD 81 8E DD 80 8E DA 88 "啋鄠庈亷輥庉€広?
seg000:00000430  96 E2 86 93 DD 88 95 DF-85 92 DC 89 96 E0 8B 98 "栤啌輬曔厭軌栢嫎"
seg000:00000440  E2 8C 99 E3 8D 9C E1 8E-9E E1 91 A2 E1 95 A7 E2 "鈱欍崪釒炨憿釙р"
seg000:00000450  97 AA E3 96 AA E1 97 A9-DE 98 AA DF A0 B3 E6 A3 "棯銝棭迾牫妫"
seg000:00000460  B6 E9 A1 B2 E3 A2 B3 E4-A5 B8 E5 A4 B7 E4 A8 B9 "堕〔恽充ジ澶蜂ü"
seg000:00000470  E4 A5 B6 E1 AB BB E5 AB-BB E5 AD BB E5 B2 C0 EA "浈夺瀚诲宀狸"
seg000:00000480  B1 BF E9 B2 C1 E8 B1 C3-E8 B4 C6 EB B5 C4 EB B6 "笨椴凌泵璐齐的攵"
seg000:00000490  C2 EA BB C6 EC C0 C8 ED-BE C6 EB BD C5 EA C1 CC "玛黄炖软酒虢抨撂"
seg000:000004A0  F2 B8 C8 EC B6 CD ED B8-CF EF BB CA F1 BB BF F2 "蚋褥锻砀巷皇窕框"
seg000:000004B0  93 88 CE 77 5D AB 77 50-9B 83 56 9F 70 4A 92 65 "搱蝫]玾P泝V焢J抏"
seg000:000004C0  45 8C 60 46 8C 54 41 86-53 44 88 54 47 8B 51 47 "E宍F孴A哠D圱G婹G"
seg000:000004D0  8D 4A 40 86 52 47 8F 55-4A 93 4F 46 8F 51 47 93 "岼@哛G廢J揙F廞G?
seg000:000004E0  54 4C 99 5D 53 9F 5D 50-9A 60 53 9D 5C 51 9A 59 "TL橾S焆P歚S漒Q歒"
seg000:000004F0  51 9E 60 5D AC 63 64 B5-60 65 BA 5E 66 BF 5D 68 "Q瀈]琧d礰e篰f縘h"
seg000:00000500  C4 60 6C CC 5F 6C CE 5C-68 CE 5C 68 CE 5B 66 CE "腵l蘝l蝄h蝄h蝃f?
seg000:00000510  57 61 CC 56 60 CC 54 5B-CA 56 5C CD 59 60 CF 59 "Wa蘓`蘐[蔞\蚘`蟉"
seg000:00000520  60 CF 55 5D C8 52 5A C5-55 5E C6 5A 63 CB 5C 67 "`蟄]萊Z臮^芞c薥g"
seg000:00000530  CF 63 6E D6 5F 6C D6 62-6F D9 5E 6B D7 60 6D D9 "蟘n謃l謆o賌k譧m?
seg000:00000540  56 65 D3 56 63 D1 56 60-CC 51 57 C2 56 59 C2 4C "Ve覸c裋`蘍W耉Y翷"
seg000:00000550  4B B2 49 44 A7 4C 44 A3-42 37 94 50 41 9D 50 3F "K睮DD7擯A漃?"
seg000:00000560  9A 4A 38 93 4D 3A 91 49-34 89 47 33 86 42 2B 7D "欽8揗:慖4塆3咮+}"
seg000:00000570  46 30 7E 49 2F 7B 4B 2D-74 57 38 7D 4A 2C 73 58 "F0~I/{K-tW8}J,sX"
seg000:00000580  3A 81 58 3B 84 60 43 8C-5B 40 8A 5D 42 8C 5E 44 ":乆;刞C孾@奭B宆D"
seg000:00000590  90 56 3C 88 5C 42 8E 5A-40 8C 58 3C 88 59 3D 89 "怴<圽B嶼@孹<圷=?
seg000:000005A0  54 39 83 50 36 82 4D 37-86 56 40 92 57 45 98 56 "T9働6侻7哣@扺E榁"
seg000:000005B0  44 97 58 4A 9C 66 58 AA-6E 64 B1 6E 64 B0 73 6A "D梄J渇X猲d眓d皊j"
seg000:000005C0  B3 6C 64 AA 77 6E B1 78-6E B0 76 6D AC 71 66 A5 "砽d獁n眡n皏m琿f?
seg000:000005D0  78 6A AA 71 63 A3 6B 5A-9D 61 4F 92 5C 4A 8D 55 "xj猶cZ漚O抃J峌"
seg000:000005E0  3E 82 48 31 75 43 27 6C-3E 22 67 42 23 68 41 22 ">侶1uC'l>"gB#hA""
seg000:000005F0  67 43 21 67 3C 1A 61 3B-19 60 34 11 5B 33 10 5A "gC!g<a;`4[3Z"
seg000:00000600  31 0D 59 3B 17 63 38 15-5F 3B 18 62 3D 1D 64 43 "1
Y;c8_;b=dC"
seg000:00000610  23 6A 49 2C 75 4B 30 7A-4D 34 7E 4E 38 86 5B 45 "#jI,uK0zM4~N8哰E"
seg000:00000620  97 53 40 97 56 45 A0 59-4A AC 53 46 AC 51 44 B0 "桽@梀E燳J琒F琎D?
seg000:00000630  51 48 B7 54 4A BC 37 12-50 38 13 51 42 20 60 3D "QH稵J?P8QB `="
seg000:00000640  1B 5B 42 22 63 3A 1A 5B-3C 19 5C 40 1B 5F 43 1E "[B"c:[<\@_C"
seg000:00000650  62 40 19 5D 39 13 55 3F-19 5B 41 1C 5C 44 1F 5F "b@]9U?[A\D_"
seg000:00000660  5A 39 76 70 58 92 82 82-B2 A6 B0 D8 AD BB D8 AE "Z9vpX拏偛Π丨回?
seg000:00000670  BC D8 B2 BD DB B4 BF DF-B1 BF DC B0 BE DB B2 C3 "钾步鄞窟笨馨聚裁"
seg000:00000680  DE AE BE DB A6 BA D9 A6-B9 DA 99 AF D2 92 A6 CF "蕻聚佴冠櫙覓ο"
seg000:00000690  81 93 C8 5C 66 A6 59 55-A1 5C 55 AA 5E 5E BC 61 "亾萛fUU猑^糰"
seg000:000006A0  67 CA 5D 6A D2 61 72 D9-6B 80 E3 70 86 E5 71 8C "g蔧j襛r賙€鉷嗗q?
seg000:000006B0  E3 73 90 E5 6F 91 E4 7A-9F F1 77 9B E9 82 A4 F0 "鉺愬o戜z燅w涢偆?
seg000:000006C0  82 A2 EB 82 A2 E9 82 A3-EC 7F A2 EB 81 A3 E9 82 "偄雮㈤偅?㈦仯閭"
seg000:000006D0  A4 EA 81 A6 EA 81 A4 ED-7D A3 F1 7D A2 F2 7B A1 "り仸陙ろ}q}Ⅱ{?
seg000:000006E0  EF 7F A2 EC 84 9D E7 80-8D D9 67 64 B9 43 33 87 "?㈧劃鐎嵸gd笴3?
seg000:000006F0  5C 43 8D 66 44 8B 4F 2A-6E 48 1F 63 3E 1B 5B 54 "\C峟D婳*nHc>[T"
seg000:00000700  31 71 3E 19 59 3D 15 56-3B 0C 50 44 13 57 38 09 "1q>Y=V;PDW8	"
seg000:00000710  4E 3D 10 55 42 1D 61 4B-28 6B 55 32 72 47 1F 60 "N=UBaK(kU2rG`"
seg000:00000720  35 0B 48 3B 0C 4A 4A 1F-5E 5F 34 73 37 0E 4C 44 "5H;JJ^_4s7LD"
seg000:00000730  1B 59 5D 33 74 57 2C 6F-54 2B 6E 64 3B 7F 47 1E "Y]3tW,oT+nd;G"
seg000:00000740  62 51 28 6C 51 27 6E 58-2E 75 53 2B 72 46 1E 65 "bQ(lQ'nX.uS+rFe"
seg000:00000750  54 2C 73 57 2D 74 51 28-6B 68 3C 7F 57 2C 6D 51 "T,sW-tQ(kh<W,mQ"
seg000:00000760  20 64 50 1E 64 51 1E 62-60 2D 69 83 51 8B 79 47 " dPdQb`-i僎媦G"
seg000:00000770  87 66 37 6F 99 76 98 B3-92 B4 71 4A 81 4A 22 63 "噁7o檝槼挻qJ丣"c"
seg000:00000780  3D 19 5B 46 1D 60 66 35-79 5B 28 6B 39 0E 4D 4E "=[F`f5y[(k9MN"
seg000:00000790  20 62 56 21 6B 53 1B 66-5D 30 6F 85 5D 94 88 63 " bV!kSf]0o匽攬c"
seg000:000007A0  91 86 5F 8D 4D 1D 57 40-0E 4E 46 1B 5A 67 3C 7D "憜_峂W@NFZg<}"
seg000:000007B0  61 32 71 66 34 74 61 2F-6F 59 28 66 58 2C 67 8C "a2qf4ta/oY(fX,g?
seg000:000007C0  5E 93 AB 7A A6 93 5F 8E-77 44 80 55 22 65 49 1C "^摣z_巜D€U"eI"
seg000:000007D0  5B 53 26 5F 92 6A 93 AA-85 AD 6E 4C 7B 62 3F 77 "[S&_抝摢叚nL{b?w"
seg000:000007E0  3C 13 50 3C 0F 4E 45 16-54 4D 1B 5B 48 1B 5A 42 "<P<NETM[HZB"
seg000:000007F0  14 56 40 14 57 40 14 57-59 2E 71 54 29 6C 66 3D "V@W@WY.qT)lf="
seg000:00000800  7B 67 3E 7C 5C 32 6F 53-29 66 5C 30 6D 45 19 56 "{g>|\2oS)f\0mEV"
seg000:00000810  3E 0F 4E 4A 1C 5E 46 1B-5C 48 1D 5C 5D 34 67 94 ">NJ^F\H\]4g?
seg000:00000820  63 99 82 49 8D 43 0B 52-3C 13 51 4F 2C 65 6B 46 "c檪I岰R<QO,ekF"
seg000:00000830  7E 78 52 8C 54 33 70 62-40 80 85 61 9D 64 3F 83 "~xR孴3pb@€卆漝??
seg000:00000840  40 1A 72 38 16 7A 43 2A-8C 48 34 97 45 33 98 3F "@r8zC*孒4桬3?"
seg000:00000850  31 97 3E 31 97 3D 31 9B-46 3F A8 3D 34 A2 40 37 "1?1?1汧??47"
seg000:00000860  A5 42 38 AA 46 40 B1 4C-45 B8 48 45 B9 49 46 BA "8狥@盠E窰E笽F?
seg000:00000870  4A 4A C0 4D 4D C3 4C 4B-C3 49 48 C0 4E 4D C5 4F "JJ繫M肔K肐H繬M臤"
seg000:00000880  4E C6 4F 4E C6 59 58 D0-50 4F C7 56 55 CD 51 52 "N芆N芛X蠵O荲U蚎R"
seg000:00000890  CA 56 57 CF 55 59 D0 50-54 CB 51 57 CE 55 5B D2 "蔞W蟄Y蠵T薗W蜺[?
seg000:000008A0  50 58 CF 52 5A D1 51 59-D0 51 59 D0 54 5B D0 55 "PX蟁Z裃Y蠶Y蠺[蠻"
seg000:000008B0  5C D1 59 5E D1 5A 5F D2-5C 60 D1 5C 60 D1 57 5A "\裏^裐_襖`裓`裌Z"

位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。

位图文件的组成

结构名称

符号

位图文件头(bitmap-file header) BITMAPFILEHEADER bmfh
位图信息头(bitmap-information header) BITMAPINFOHEADER bmih
彩色表(color table) RGBQUAD aColors[]
图象数据阵列字节 BYTE aBitmapBits[]
前54字节=14字节文图文件头+40字节位图信息头
42 4D 36 00 0C 00 00 00-00 00 36 00 00 00 28 00 "BM6......6...(."  
00 00 00 02 00 00 00 02-00 00 01 00 18 00 00 00 "............"  
00 00 00 00 0C 00 00 00-00 00 00 00 00 00 00 00 "..............."  
00 00 00 00 00 00
42 B
4D M
指定了文件类型



jpg文件格式挖掘
同样将lena.jpg以二进制形式打开
,摘抄一部分,完整数据
seg000:00000000  FF D8 FF E0 00 10 4A 46-49 46 00 01 01 00 00 01 "??JFIF..."
seg000:00000010  00 01 00 00 FF DB 00 43-00 08 06 06 07 06 05 08 "...?C."
seg000:00000020  07 07 07 09 09 08 0A 0C-14 0D 0C 0B 0B 0C 19 12 "		

"
seg000:00000030  13 0F 14 1D 1A 1F 1E 1D-1A 1C 1C 20 24 2E 27 20 " $.' "
seg000:00000040  22 2C 23 1C 1C 28 37 29-2C 30 31 34 34 34 1F 27 "",#(7),01444'"
seg000:00000050  39 3D 38 32 3C 2E 33 34-32 FF DB 00 43 01 09 09 "9=82<.342?C		"
seg000:00000060  09 0C 0B 0C 18 0D 0D 18-32 21 1C 21 32 32 32 32 "	

2!!2222"
seg000:00000070  32 32 32 32 32 32 32 32-32 32 32 32 32 32 32 32 "2222222222222222"
seg000:00000080  32 32 32 32 32 32 32 32-32 32 32 32 32 32 32 32 "2222222222222222"
seg000:00000090  32 32 32 32 32 32 32 32-32 32 32 32 32 32 FF C0 "22222222222222?
seg000:000000A0  00 11 08 02 00 02 00 03-01 22 00 02 11 01 03 11 "..."."
seg000:000000B0  01 FF C4 00 1F 00 00 01-05 01 01 01 01 01 01 00 "?..."
seg000:000000C0  00 00 00 00 00 00 00 01-02 03 04 05 06 07 08 09 ".......	"
seg000:000000D0  0A 0B FF C4 00 B5 10 00-02 01 03 03 02 04 03 05 "
??."
seg000:000000E0  05 04 04 00 00 01 7D 01-02 03 00 04 11 05 12 21 "..}.!"
seg000:000000F0  31 41 06 13 51 61 07 22-71 14 32 81 91 A1 08 23 "1AQa"q2亼?#"
seg000:00000100  42 B1 C1 15 52 D1 F0 24-33 62 72 82 09 0A 16 17 "B绷R佯$3br?
"
seg000:00000110  18 19 1A 25 26 27 28 29-2A 34 35 36 37 38 39 3A "%&'()*456789:"
seg000:00000120  43 44 45 46 47 48 49 4A-53 54 55 56 57 58 59 5A "CDEFGHIJSTUVWXYZ"
seg000:00000130  63 64 65 66 67 68 69 6A-73 74 75 76 77 78 79 7A "cdefghijstuvwxyz"
seg000:00000140  83 84 85 86 87 88 89 8A-92 93 94 95 96 97 98 99 "儎厗噲墛挀敃枟槞"
seg000:00000150  9A A2 A3 A4 A5 A6 A7 A8-A9 AA B2 B3 B4 B5 B6 B7 "殺¥ウЖ┆渤吹斗"
seg000:00000160  B8 B9 BA C2 C3 C4 C5 C6-C7 C8 C9 CA D2 D3 D4 D5 "腹郝媚牌侨墒矣哉"
seg000:00000170  D6 D7 D8 D9 DA E1 E2 E3-E4 E5 E6 E7 E8 E9 EA F1 "肿刭卺忏溴骁栝犟"
seg000:00000180  F2 F3 F4 F5 F6 F7 F8 F9-FA FF C4 00 1F 01 00 03 "蝮趱鲼??."
seg000:00000190  01 01 01 01 01 01 01 01-01 00 00 00 00 00 00 01 "......"
seg000:000001A0  02 03 04 05 06 07 08 09-0A 0B FF C4 00 B5 11 00 "	
??."
seg000:000001B0  02 01 02 04 04 03 04 07-05 04 04 00 01 02 77 00 ".w."
seg000:000001C0  01 02 03 11 04 05 21 31-06 12 41 51 07 61 71 13 "!1AQaq"
seg000:000001D0  22 32 81 08 14 42 91 A1-B1 C1 09 23 33 52 F0 15 ""2?B憽绷	#3R?"
seg000:000001E0  62 72 D1 0A 16 24 34 E1-25 F1 17 18 19 1A 26 27 "br?$4??&'"
seg000:000001F0  28 29 2A 35 36 37 38 39-3A 43 44 45 46 47 48 49 "()*56789:CDEFGHI"
seg000:00000200  4A 53 54 55 56 57 58 59-5A 63 64 65 66 67 68 69 "JSTUVWXYZcdefghi"
seg000:00000210  6A 73 74 75 76 77 78 79-7A 82 83 84 85 86 87 88 "jstuvwxyz們剠唶?
seg000:00000220  89 8A 92 93 94 95 96 97-98 99 9A A2 A3 A4 A5 A6 "墛挀敃枟槞殺¥ウ"
seg000:00000230  A7 A8 A9 AA B2 B3 B4 B5-B6 B7 B8 B9 BA C2 C3 C4 "Ж┆渤吹斗腹郝媚"
seg000:00000240  C5 C6 C7 C8 C9 CA D2 D3-D4 D5 D6 D7 D8 D9 DA E2 "牌侨墒矣哉肿刭阝"
seg000:00000250  E3 E4 E5 E6 E7 E8 E9 EA-F2 F3 F4 F5 F6 F7 F8 F9 "沅彐玷殛蝮趱鲼"
seg000:00000260  FA FF DA 00 0C 03 01 00-02 11 03 11 00 3F 00 E8 "??..?.?
seg000:00000270  49 19 FA 53 5D 87 3E E0-D3 4E 71 80 71 41 39 FC "I鶶]?嘤Nq€qA9?
seg000:00000280  EB C9 72 3E A9 21 0B 0C-0F 6A 4C 8C D2 9C 53 40 "肷r>?jL屢淪@"
seg000:00000290  CF D6 A6 E3 B1 2C 47 E6-C5 5B 4F BA 6A BC 48 40 "现︺?G媾[O簀糎@"
seg000:000002A0  AB 00 E3 AD 4B 64 B1 B3-1C 25 73 7A AB 02 81 40 "?悱Kd背%sz?丂"
seg000:000002B0  39 02 B7 E7 60 51 87 7A-E7 35 22 76 9C 60 9A D2 "9风`Q噝?"v渀氁"
seg000:000002C0  8B D4 D2 2B 43 9E DC 04-9D 47 4C 55 98 C8 3D 3B "嬙?C炣滸LU樔=;"
seg000:000002D0  1C D5 32 0F 98 7D 8D 59-4C 90 09 E8 6B BE 4C 49 "?榼峐L?鑛綥I"
seg000:000002E0  13 06 1B B3 40 61 8A 40-0F 04 9A 43 C1 00 1E 2B "矦a夽欳?+"
seg000:000002F0  3B 8E C3 89 04 8C 7A 55-88 88 FD 31 55 54 90 E0 ";幟?寊U垐?UT愢"
seg000:00000300  7E 1F 4A B0 98 CF 5A 4D-8E C5 94 07 60 18 E9 8A "~J皹蟌M幣?`閵"
seg000:00000310  94 30 DE 3E 98 A8 54 E4-74 A9 46 7D 0E 6B 26 34 "??槰T鋞〧}k&4"
seg000:00000320  48 69 CC 41 A8 C1 F6 C6-05 38 73 C9 34 AE 16 0C "Hi藺銎8s??"
seg000:00000330  1E 4F BD 39 48 19 27 DA-90 E3 B5 03 AE 41 ED 40 "O?H'趷愕瓵鞞"
seg000:00000340  58 7A F4 EA 28 1D 3E 94-D0 70 39 14 A3 91 C9 A0 "Xz絷(>斝p9蔂"
seg000:00000350  69 03 1C F4 A0 90 46 29-33 D8 1C 52 F6 F6 A0 2C "i魻怓)3?R鲻?"
seg000:00000360  2E E0 28 24 74 CD 34 64-90 69 3A 8E B4 D0 AC 3D ".?$t?d恑:幋鞋="
seg000:00000370  BA 1E 3B E6 99 D3 83 EB-4B D0 71 4C C7 39 A1 B1 "?;鏅觾隟衠L?”"
seg000:00000380  24 3C 1F 97 38 A4 04 13-46 4F 72 69 14 52 1A 44 "$<??FOriRD"
seg000:00000390  99 C1 C9 A6 83 F3 03 E9-CD 2E D1 8E A4 D3 71 D7 "櫫搔凅橥.褞びq?
seg000:000003A0  07 A1 A0 07 4A 77 1C 8A-6E 41 C8 1D E8 ED CF 3C "Jw妌A?桧?"
seg000:000003B0  52 11 E9 4C 2C 0A 40 20-FD 69 14 E7 27 EB 49 C0 "R長,
@ 齣?隝?
seg000:000003C0  A0 01 EF 4C 56 14 F4 FC-31 49 D3 AD 03 24 72 3A "?風V酎1I迎$r:"
seg000:000003D0  73 41 1C 13 40 10 B1 FD-05 53 9B 91 8F 7A BA E0 "sA@饼S洃弞亨"
seg000:000003E0  9E 49 3F 4A AA EB 93 80-3D EB 44 43 45 8B 07 1C "濱?J搥=隓CE?"
seg000:000003F0  1F C2 B7 20 23 02 B9 78-98 C7 28 C7 4A DE B4 93 "路 #箈樓(荍薮?
seg000:00000400  72 82 0D 44 E3 D4 6F 54-6A 13 F2 54 00 63 00 F6 "r?D阍oTj騎.c.?
seg000:00000410  A9 63 39 5C 50 63 24 D7-3B D0 85 A0 C0 7E 5F C0 "ヽ9\Pc$?袇犂~_?
seg000:00000420  52 93 93 9F 7A 78 4C 8E-71 41 4C 73 9A 4D F4 19 "R摀焭xL巕ALs歁?"
seg000:00000430  17 B5 2F 45 E6 9C 47 34-84 0E 83 AD 21 86 41 5C "?E鏈G4?儹!咥\"
seg000:00000440  52 B1 F9 71 4D 24 8C 66-93 39 1C 53 5B 09 A3 67 "R冰qM$宖?S[	"
seg000:00000450  43 95 03 32 13 CE 73 8A-E9 63 20 8A E1 21 99 A0 "C?2蝧婇c 娽!櫊"
seg000:00000460  9C 48 0F 4F E5 5D 85 8D-C0 9A 25 60 7A 8A CE 4A "淗O錧厤罋%`z娢J"
seg000:00000470  CC E3 AF 0D 6E 52 F1 1D-BC 93 D8 48 10 64 E0 D7 "蹄?nR?紦豀d嘧"
seg000:00000480  95 80 52 66 46 18 60 79-15 ED 92 44 25 88 A9 1D "晙RfF`y頀D%埄"
seg000:00000490  45 79 9F 8A 74 96 B3 BB-33 A2 E1 18 F3 8A DF 0F "Ey煀t柍?⑨髪?"
seg000:000004A0  52 CF 95 8E 84 97 C2 65-29 1C 1F 4A 79 E5 9B 07 "R蠒巹椔e)Jy鍥"
seg000:000004B0  AD 56 8D F0 39 35 60 30-DD 8F D2 BA 19 D6 87 1E "璙嶐95`0輳液謬"
seg000:000004C0  54 63 DE 80 09 38 A4 1C-8C 83 F5 A0 64 74 3C 52 "Tc迉	8?寖鯛dt<R"
seg000:000004D0  7A 8D 68 3F A7 3E D8 A4-7E 41 C5 19 CE 69 79 EB "z峢??丐~A?蝘y?
seg000:000004E0  48 68 70 39 04 8F F3 CD-21 07 6F F9 F5 A5 00 E4 "Hhp9忬?o??
seg000:000004F0  01 4F 55 01 4B 3F 00 7A-D2 B8 EC 56 44 62 41 C7 "OUK?.z腋霽DbA?
seg000:00000500  4F F0 AD 0B DF 12 69 B6-9A 79 8A 49 89 93 66 DD "O瓠?i稓y奍墦f?
seg000:00000510  AA 33 CD 73 3A CE B6 90-FE E2 DD C6 F6 E0 93 D0 "?蛃:味慆廨砌鄵?
seg000:00000520  57 1F 24 8F 34 8C EE 72-49 EB 5D 34 F0 FE D3 59 "W$?岊rI隴4瘙覻"
seg000:00000530  6C 61 52 A2 5A 23 DA 8F-A5 28 14 05 C1 CE 69 D8 "laR#趶?廖i?
seg000:00000540  38 AF 35 9B 0D 23 1D 28-8C 7C D4 ED A4 F4 A9 63 "8??#(寍皂ヽ"
seg000:00000550  4C 0E 69 92 D8 EF BA 06-7A 52 33 71 4E 6E 05 40 "Li捸锖zR3qNn@"
seg000:00000560  5B 3C 1A 9B 5C 48 49 8E-57 23 D2 B0 B5 15 5D 8D "[<沑HI嶹#野?]?
seg000:00000570  9D DC 7A 1A DD 75 CA 57-3F AA 67 69 20 E2 B4 A4 "澻z輚蔠?猤i 獯?
seg000:00000580  FD E3 58 EA 8E 70 81 E6-F1 56 10 65 71 8A AA C1 "X陰p佹馰eq姫?
seg000:00000590  BC E1 83 DE AD 46 31 5D-B2 12 26 24 2B 10 4E 71 "坚冝璅1]?&$+Nq"
seg000:000005A0  DC 53 73 E8 33 C7 6A 52-0E 09 61 48 DD 71 9A 81 "躍s?莏R	aH輖殎"
seg000:000005B0  80 03 23 1C FD 6A CA 11-C6 31 F9 D5 75 E1 AA 78 "€#齤??u岐x"
seg000:000005C0  F9 35 2C 65 85 38 E9 D2-A5 07 1C 8E 98 A8 D7 24 "?,e?橐?帢ㄗ$"
seg000:000005D0  0F D6 A4 5E 3F AD 43 18-F1 9E B8 A7 0C 00 69 87 "证^?瑿駷抚.i?
seg000:000005E0  9F F1 A5 CE 29 0C 7E 70-39 07 DE 8C 82 73 4D 06 "燅ノ)~p9迣俿M"
seg000:000005F0  97 81 DA 9D 84 38 13 B7-AD 00 9C 53 71 4A 09 52 "梺跐?翻.淪qJ	R"
seg000:00000600  06 69 0C 52 D9 3C E2 93-77 1F 8F 7A 43 DB 1E B4 "iR?鈸w弞C??
seg000:00000610  AA 79 E9 F8 D0 31 41 00-E4 E3 DA 90 10 1B 1F 9D "獃轼?A.溷趷?
seg000:00000620  39 B0 7A 75 A8 49 20 F3-40 92 B9 26 EE 71 9C F3 "9皕u↖ 驚捁&顀滙"
seg000:00000630  41 21 B3 93 D4 F0 2A 00-C4 FD 29 E0 83 CF 7A 01 "A!硴责*.凝)鄡蟴"
seg000:00000640  A2 4C 81 C7 34 D5 3C D3-32 73 40 39 EB DB 8C 50 "伹4??s@9脎孭"
seg000:00000650  2B 16 15 BD 78 A4 6C 02-70 73 51 8C 81 9C E6 9D "+絰psQ寔滄?
seg000:00000660  9C F1 4C 41 91 9F 5E 7F-4A 6B 72 4E 07 1D A9 DC "滖LA憻^JkrN┸"
seg000:00000670  00 7D A9 87 BF B5 03 42-92 06 32 29 BC 67 8F AD ".}﹪康B?2)糶彮"
seg000:00000680  2F 55 EB D6 90 F5 3C 50-03 B7 03 D6 90 1E A6 93 "/U胫愼<P?謵"
seg000:00000690  39 E3 14 A0 71 C7 5A 06-46 D8 F4 FC 6A 09 06 D6 "9?爍荶F佤黬	?
seg000:000006A0  3B 49 23 18 CD 4E FF 00-28 C9 E9 D6 A1 97 0E 32 ";I#蚇.(砷帧?2"
seg000:000006B0  05 68 8C EC 54 70 71 9A-D3 D3 E5 ED 9A CE 61 CE "h岇Tpq氂渝須蝍?
seg000:000006C0  41 AB F6 60 E4 1E 6A 9E-A8 46 EC 47 8A B2 30 40 "A`?j灗F霨姴0@"
seg000:000006D0  06 A9 DB B7 03 9C D5 B5-6C F1 5C D2 44 30 1C 1A "┷?溦祃馶褼0"
seg000:000006E0  5E 31 D3 83 48 C4 1C 64-D3 72 71 F4 AC DA 01 0F "^1觾H?d觬q衄?"
seg000:000006F0  CB D6 9A D8 34 E3 C8 C5-37 8C E2 92 28 69 C6 30 "酥氊4闳?屸?i?"
seg000:00000700  29 BC 7E 74 F2 32 71 48-56 A9 09 8C 3C 8C 56 AE ")紐t?qHV??孷?
seg000:00000710  89 7C 63 97 C9 66 38 ED-9A CA 22 98 AE 62 90 3A "墊c椛f8須?槷b?"
seg000:00000720  9E 57 9A 24 AE 89 94 79-95 8F 43 8D C3 28 C5 67 "濿?畨攜晱C嵜(舋"
seg000:00000730  6B 7A 72 5F 59 BA 91 9E-29 74 AB C5 B8 B7 56 07 "kzr_Y簯?t阜V"
seg000:00000740  9E F5 A9 80 EA 41 15 82-BA 3C F7 78 48 F1 49 ED "烏﹢闍偤<鱴H馡?
seg000:00000750  DE D6 E1 E1 70 43 2B 60-71 D6 A4 56 C9 EB F8 D7 "拗後pC+`q证V呻"
seg000:00000760  55 E3 2D 18 AF FA 64 4B-CA FD EC 7A 57 23 13 9C "U?dK数靭W#?
seg000:00000770  70 70 7D EB BE 13 E7 8D-CF 42 9C B9 A3 74 58 56 "pp}刖鐛螧湽XV"
seg000:00000780  07 8F 5A 76 47 A0 18 A4-0C 1B A0 FC E9 4E 0D 33 "廧vG??狘镹
3"
seg000:00000790  41 C9 CF 07 03 D6 A4 54-ED 9A 89 07 23 B7 BD 4E "A上证T須?#方N"
seg000:000007A0  98 45 DC C7 00 72 4D 26-08 78 55 55 DC C7 00 0A "楨芮.rM&xUU芮.
"
seg000:000007B0  E5 F5 ED 78 0D F0 5B 12-48 E0 91 4C F1 07 88 71 "艴韝
餥H鄳L?坬"
seg000:000007C0  BA D6 D8 F3 D0 90 6B 96-79 1E 54 01 CF 20 F5 AE "褐伢袗k杫T?醍"
seg000:000007D0  AA 14 2F EF 48 C6 B5 5B-7B B1 06 0C E1 99 C9 DF "?/颒频[{?釞蛇"
seg000:000007E0  9C 9C D0 06 E7 18 E3 1D-33 4D 54 3D CF B1 A9 53 "湝???3MT=媳㏒"
seg000:000007F0  1F 77 38 F5 3E 95 D8 DF-43 99 27 BB 3D AC AF B6 "w8?曍逤???
seg000:00000800  29 C0 0F 50 68 39 E7 39-A7 20 C9 15 F3 E7 68 AA ")?Ph9???箸h?
seg000:00000810  9D E9 FB 80 1D 69 24 70-8B 81 55 CC DC E7 35 2D "濋麁i$p媮U誊?-"
seg000:00000820  82 57 26 76 CA E3 D6 A2-19 3D A8 46 2E 7A F6 A7 "俉&v抒症=‵.z雩"
seg000:00000830  60 83 80 28 43 B5 86 C8-7E 4A E7 F5 42 7C B2 49 "`儉(C祮葉J珲B|睮"
seg000:00000840  35 D0 48 3E 4A E7 B5 55-C2 31 C1 AB A7 F1 1A 43 "5蠬>J绲U?莲яC"
seg000:00000850  63 9B DF FB D3 F5 AB 49-8F 43 C7 EB 54 FF 00 E5 "c涍醌I廋请T.?
seg000:00000860  B9 EB F5 AB 91 1C 2E 00-FA F1 5D EF 62 56 E4 9B "闺醌?..]颾V錄"
seg000:00000870  88 ED 48 7E 6E BC 9A 50-A4 F3 8E 7D A9 38 E0 F7 "堩H~n細Pん巬?圜"
seg000:00000880  A8 18 0E 3B F5 F6 AB 29-ED F9 55 65 1D B3 56 63 "?;貊?睐Ue砎c"
seg000:00000890  04 1C 67 81 EF 49 8D 13-A9 C0 3E D5 22 90 49 3D "g侊I?├>?怚="
seg000:000008A0  FA 53 07 41 81 4F 03 E5-E6 A0 63 D4 E4 73 F9 53 "鶶A丱彐燾凿s鵖"
seg000:000008B0  81 04 12 69 80 65 B2 3A-D2 F6 FE B4 86 2E E0 18 "?i€e?姻??"
seg000:000008C0  0A 55 27 1C 8A 45 19 34-A0 0C 60 62 84 31 49 3C "
U'奅4?`b?I<"
seg000:000008D0  F1 8C 51 B8 91 C0 E3 D6-90 92 0E 3A D3 B0 42 A9 "駥Q笐楞謵?:影B?
seg000:000008E0  C8 3F 4A 01 8A 3A 75 14-DE 94 A4 63 AF 7F 4A 6E "?J?u迶?Jn"
seg000:000008F0  7B D0 C1 21 CC D9 18 C5-46 C7 2B 8C 9A 7B 0C 61 "{辛!藤臚?寶{a"
seg000:00000900  BA 83 E9 4D 5E 41 C8 3F-5F 4A 06 46 C3 27 03 39 "簝镸^A?_JF?9"
seg000:00000910  CD 28 C0 62 73 CE 2A 53-6F 28 3C A1 F5 E7 AD 4B "?纀s?So(<□绛K"
seg000:00000920  0E 99 3D C7 24 04 51 C9-63 D8 7F 9E D4 F9 5F 63 "??Q蒫?炘鵢c"
seg000:00000930  39 54 82 DD 95 59 C0 E0-75 EF 48 1B 27 15 A0 74 "9T傒昚类u颒'爐"
seg000:00000940  3B 90 A0 87 4C E7 A1 3C-81 EF 51 BE 89 7E A3 88 ";悹嘗纭<侊Q緣~"
seg000:00000950  77 63 93 83 D3 EB 4F 95-91 ED E9 F7 2B A9 E3 06 "wc搩与O晳黹?┿"
seg000:00000960  9D C1 E6 A3 64 96 03 89-51 93 3D 37 0A 45 98 63 "澚妫d?塓?7
E榗"
seg000:00000970  9C 0A 5E A5 DE EA E8 9D-B1 4C C8 A6 EF DC 07 14 "?^マ觇澅L圈镘"
seg000:00000980  B9 04 81 40 D2 14 8E 3D-85 34 E7 39 22 9E A3 E5 "?丂????"灒?
seg000:00000990  19 E6 93 01 72 48 A2 C3-1B C1 FA FA 52 E7 B5 1C "鎿rH⒚龙鶵绲"
seg000:000009A0  63 AD 1D 07 EB 48 63 1F-D0 74 A8 5C 6E CF 22 A5 "c?際c衪╘n??
seg000:000009B0  6E 9C 9A 80 F5 FE 75 68-87 B1 0B 80 31 56 ED 4F "n湚€觜uh嚤€1V鞳"
seg000:000009C0  4C 0C 55 67 38 E0 76 A9-ED 89 C8 15 6F 61 1B 30 "LUg8鄓╉壢oa0"
seg000:000009D0  1C 76 AB 6A FC 55 18 89-E3 15 61 1F 1C 71 58 32 "v玧黆夈aqX2"
seg000:000009E0  64 8B 39 CD 01 B8 A6 2B-66 94 93 D4 56 72 44 0A "d??甫+f敁訴rD
"
seg000:000009F0  4F F8 D0 48 07 AD 33 34-60 13 C9 A4 55 87 91 C6 "OH?4`嗓U噾?
seg000:00000A00  69 A4 F3 93 46 48 E3 34-C6 6F F1 A0 2C 2B 10 3B "iん揊H?苚駹,+;"
seg000:00000A10  D4 52 61 81 06 86 63 DB-9A 63 12 4F 35 43 48 D0 "訰a?哻蹥cO5CH?
seg000:00000A20  D1 EF 16 DE E8 23 0C AB-71 CF AD 76 D6 EC AC A0 "扬掼#玵檄v朱瑺"
seg000:00000A30  80 2B CD C1 20 87 07 91-CD 76 5A 25 F8 B8 B7 50 "€+土 ?懲vZ%稰"
seg000:00000A40  4F CC BC 1A C2 71 57 BD-8E 5C 4D 3B AE 64 6A DE "O碳聁W綆\M;甦j?
seg000:00000A50  DB 8B 8B 66 43 DC 62 BC-8F 5A B2 93 4C D4 5E 36 "蹕媐C躡紡Z矒L証6"
seg000:00000A60  DD B1 89 2A 6B D9 14 E5-6B 93 F1 7E 8D F6 BB 36 "荼?k?錵擇~嶖?"
seg000:00000A70  92 35 F9 D3 91 5A 52 A8-E0 ED D1 98 61 E7 CB 2B "?慫Rㄠ硌榓缢+"
seg000:00000A80  33 80 57 F5 35 3A 90 70-01 FD 2A 8A 07 18 C8 23 "3€W?:恜???"
seg000:00000A90  9C 74 AB 51 0C 64 B1 E0-75 AE B6 8F 42 E5 A5 0A "渢玅d编u廈濂
"
seg000:00000AA0  A9 BD 8E 31 D6 B9 9D 7B-C4 3B 33 6F 6A 70 DD C8 "┙?止漿?3ojp萑"
seg000:00000AB0  34 BA E6 BE 15 4C 16 CD-93 D0 9F 4A E4 98 B3 3E "4烘?L蛽袩J錁?"
seg000:00000AC0  E6 24 93 DE BA 28 50 BF-BD 23 2A 95 2D A2 02 5E "?撧?P拷#*??^"
seg000:00000AD0  59 09 76 62 58 F7 AB 1E-51 61 F3 46 D9 3D F1 8C "Y	vbX鳙Qa驠?駥"
seg000:00000AE0  D4 71 A0 EE 3B F7 A9 99-40 51 81 8A ED 6C E5 EA "詑狀;鳗橜Q亰韑尻"
seg000:00000AF0  46 41 19 07 03 3D A9 03-ED E1 7E F1 34 8F 80 3B "FA=?磲~?弨;"
seg000:00000B00  64 76 A8 FA F3 9E 73 52-51 EE 7C B1 E2 A6 8C 6C "dv鬄sRQ顋扁l"
seg000:00000B10  5E 69 B1 A6 4E 68 9E 40-AB 80 6B E7 9B 3B 77 76 "^i宝Nh濦珋k鐩;wv"
seg000:00000B20  2B 5D 4B 83 9C D5 01 3E-E3 C1 AA FA 95 E0 8C 75 "+]K儨?>懔曕寀"
seg000:00000B30  A8 74 E9 3C E7 DC 41 C7-6E 6A E3 1D 2E 6E 92 48 "╰?畿A莕j?.n扝"
seg000:00000B40  DF B7 FF 00 57 CD 48 47-34 90 01 B7 D2 A4 3E A2 "叻.W虷G4?芬??
seg000:00000B50  A2 FA 98 BD C8 E5 1F 29-AE 7B 54 24 46 DE F5 D1 "Ⅹ樈儒)畕T$F搋?
seg000:00000B60  4B 9D BD 71 5C EE AE 3F-74 DC D5 D3 F8 8D 21 B1 "K澖q\町?t苷峪??
seg000:00000B70  CB 16 CC A7 BE 38 AB 51-91 EA 3F C6 A8 93 89 8F "?抬?玅戧?屁搲?
seg000:00000B80  39 AB 48 CB D0 02 06 7A-D7 A0 D6 84 A7 A9 6F 38 "9獺诵z谞謩Зo8"
seg000:00000B90  C7 3D 78 A4 1D 2A 3D C0-63 9C F3 4E 04 9E 33 59 "?x?*=纁滙N?Y"
seg000:00000BA0  B1 92 A8 01 B1 FC EA C2-A9 65 C9 15 55 58 63 07 "睊?秉曷〆?UXc"
seg000:00000BB0  B7 7A B0 84 E3 00 FE B5-2D 14 8B 2A 00 18 E9 4E "穤皠?-?.镹"
seg000:00000BC0  5C F4 35 18 6C 1E B4 FD-D8 15 16 28 90 E3 39 14 "\?l待?(愩9"
seg000:00000BD0  AB 93 51 E4 9C 92 79 A7-02 48 C6 7F FA F4 80 93 "珦Q錅抷?H?€?
seg000:00000BE0  80 00 FC E8 C8 2B CF 6A-6E 78 EB 4A BB A4 75 44 "€.?蟡nx隞护uD"
seg000:00000BF0  05 98 F0 31 CD 34 00 48-19 20 D0 38 E7 19 A9 22 "橉1?.H ???"
seg000:00000C00  86 39 11 CC B3 14 90 70-A9 8E B5 33 1B 58 80 00 "?坛恜?X€."
seg000:00000C10  17 6E 01 27 B9 AA 51 B9-9C AA 28 E8 56 27 2D C0 "n'躬Q箿?鑆'-?
seg000:00000C20  FA 0A 74 70 B4 A7 83 80-29 93 4C CE 70 30 A3 AE "?tp揣儉)揕蝡0."
seg000:00000C30  14 54 D0 4A C2 32 06 00-AB 50 5B 99 CA AB B6 85 "T蠮?.玃[櫴?
seg000:00000C40  98 20 8B 1D 33 91 CE 7D-29 C8 CA 09 51 18 C9 E4 "??3懳})仁	Q射"
seg000:00000C50  71 D4 F6 35 5C DC 10 76-E0 74 FC 2A C2 4A A1 D5 "q增5\?v鄑?翵≌"
seg000:00000C60  70 49 04 64 D5 DE C7 34-B9 9E EC B7 6D 1C 65 F2 "pId辙?篂旆me?
seg000:00000C70  E3 9F 43 57 22 C1 60 41-EF C7 1F CA B3 E3 1B 40 "銦CW"羆A锴食?@"
seg000:00000C80  E3 3D 70 07 AD 5A 4C 2A-65 BE F1 1E BD BD FF 00 "?p璟L*e抉浇."
seg000:00000C90  FA D4 9B 30 94 4D 00 17-1B 93 A8 EF D8 1A 43 2B "?擬.摠镓C+"
seg000:00000CA0  29 01 40 C2 F7 3D 33 FE-7D 6A 04 76 41 85 E7 A6 ")@瞒=3jvA呯?
seg000:00000CB0  3B 01 C7 6A 9D 55 B6 A8-E4 B6 30 38 E4 7D 3D 2A ";莏漊定涠08鋧=*"
seg000:00000CC0  59 8B 56 24 C2 3F 12 A0-72 C3 AB 8E 4F D2 A9 5C "Y媀$?爎毛嶰药\"
seg000:00000CD0  78 7A CA E8 66 30 62 72-38 DB D0 55 F4 50 17 E6 "xz疏f0br8坌U鬚?
seg000:00000CE0  1E E4 67 F9 9A 95 08 DB-C7 DD CF 1D 85 2B 89 4A "鋑鶜?矍菹?塉"
seg000:00000CF0  51 D6 2C E3 EF 74 1B CB-20 64 8C 79 D1 8F EE 8E "Q?泔t?d寉褟顜"
seg000:00000D00  7F 2A CB 59 33 C1 E3 D7-35 E9 41 B2 A3 D0 FA F0 "*薡3零?锳玻喧?
seg000:00000D10  3F 2A C8 D5 BC 39 05 EA-99 60 C4 33 FA F4 0C 68 "?*日?隀`?h"
seg000:00000D20  DC EB A5 8C B6 93 39 35-93 2B C5 29 25 85 32 E6 "茈稉95??%??
seg000:00000D30  DE E3 4F 73 15 CA 15 6C-F0 7B 1F 71 51 89 B7 0C "捭Os?l饆qQ壏"
seg000:00000D40  7A 77 A1 A3 BE 32 4F 54-4B 9C B7 7E 69 37 7A D3 "zw。?OTK湻~i7z?
seg000:00000D50  03 F5 C7 3E F4 6E ED 8A-9B 17 70 66 24 F3 50 B9 "跚>鬾韸?pf$驪?
seg000:00000D60  C8 E9 C8 3E 94 AC 4E 73-9A 89 8E 07 5A A4 0C 6C "乳?敩Ns殙?Z?l"
seg000:00000D70  84 E2 AC 5A 83 B8 64 55-37 63 9E 4E 47 7A B9 6A "勨琙兏dU7c濶Gz筳"
seg000:00000D80  49 7E B4 DE C4 A4 6B C2-38 03 B5 48 38 26 99 17 "I~崔膜k?礖8&?"
seg000:00000D90  20 03 CD 48 46 0F E1 58-DF 52 5A 24 56 3E B5 20 " 虷F醁逺Z$V>?"
seg000:00000DA0  35 00 3C 73 4F 56 EC 69-34 4B 43 B2 07 18 A0 B6 "5.<sOV靑4KC?牰"
seg000:00000DB0  29 08 DC 38 A8 8B 63 39-15 0C A4 89 4B 83 8A 8C ")?▼c9K儕?
seg000:00000DC0  BD 34 1C 8A 0F 5E 3A D2-1D 86 B1 20 E0 F4 A4 DC "??^:?啽 圄ぼ"
seg000:00000DD0  49 E6 82 32 33 8E 29 31-CD 31 D8 0F 4A BB A6 DF "I鎮23?1??J沪?
seg000:00000DE0  1B 3B 95 62 70 A7 83 54-80 24 52 32 F1 EF 49 AB ";昩pT€$R2耧I?
seg000:00000DF0  A2 5C 53 56 67 A4 DA CC-25 8D 48 3D 45 58 9A 15 "SVgぺ?岺=EX?"
seg000:00000E00  9E 16 52 3A 8A E5 7C 3B-A8 9D 9E 43 93 B9 7A 64 "?R:婂|;濩摴zd"
seg000:00000E10  F6 AE B6 23 B8 56 49 74-67 93 5A 0E 9C 8F 2D F1 "霎?竀Itg揨湉-?
seg000:00000E20  1E 8A 74 FD 43 CD 55 FD-DB 92 7D 81 AE 27 5D D6 "妕鼵蚒拀伄']?
seg000:00000E30  44 2B E4 5B B7 CD 8E 48-ED 5E B3 F1 22 EA D6 C7 "D+鋄吠嶩韃绸"曛?
seg000:00000E40  C3 37 12 CA CA 25 23 11-8E E5 BD AB E7 96 77 95 "?适%#庡将鐤w?
seg000:00000E50  F7 B1 E4 9C 93 9A F4 B0-50 F6 8A F2 E8 75 2A CF "鞅錅摎舭P鰥蜩u*?
seg000:00000E60  91 77 17 E6 91 99 9B 24-93 D4 9C D4 8A 8D 91 81 "憌鎽櫅$撛溤妽憗"
seg000:00000E70  4D 55 CF 03 D7 F2 AB 07-38 00 63 F2 AF 49 99 2E "MU?昨?8.c虔I?"
jpg压缩比例不固定
本文仅讨论静止图像的压缩基本算法,图像压缩的目的在于以较少的数据来表示图像以节约存储费用,或者传输时间和费用。   
jpeg压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。这也就是为什么jpeg会有如此满意的压缩比例的原因。 下面主要讨论,jpeg基本压缩法。
 
一.jpeg压缩过程 jpeg压缩分四个步骤实现:   
1.颜色模式转换及采样;    2.dct变换;     3.量化;     4.编码。
 
二.

1.颜色模式转换及采样 rgb色彩系统是我们最常用的表示颜色的方式。jpeg采用的是ycbcr色彩系统。

想要用jpeg基本压缩法处理全彩色图像,得先把rgb颜色模式图像数据,转换为ycbcr颜色模式的数据。y代表亮度,cb和cr则代表色度、饱和度。
通过下列计算公式可完成数据转换。   
y=0.2990r+0.5870g+0.1140b    cb=-0.1687r-0.3313g+0.5000b+128   cr=0.5000r-0.4187g-0.0813b+128  
人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说y成份的数据是比较重要的。
 
既然cb成份和cr成份的数据比较相对不重要,就可以只取部分数据来处理。
以增加压缩的比例。jpeg通常有两种采样方式:yuv411和yuv422,它们所代表的意义是y、cb和cr三个成份的数据取样比例。
 
2.dct变换 dct变换的全称是离散余弦变换(discrete cosine transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。
 
压缩时,将原始图像数据分成8*8数据单元矩阵,
例如亮度值的第一个矩阵内容如下: jpeg将整个亮度矩阵与色度cb矩阵,饱和度cr矩阵,视为一个基本单元称作mcu。每个mcu所包含的矩阵数量不得超过10个。
例如,行和列采样的比例皆为4:2:2,则每个mcu将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。
 
当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入dct变换公式中,即可达到dct变换的目的。图像数据值必须减去128,是因为dct转换公式所接受的数字范围是在-128到+127之间。 dct变换公式: x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表dct变换后矩阵内某个数值的坐标位置f(u,v)代表dct变换后矩阵内的某个数值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过dct变换后的矩阵数据自然数为频率系数,这些系数以f(0,0)的值最大,称为dc,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为ac。
 
3、量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,jpeg提供的量化表如下:
 
4、编码 huffman编码无专利权问题,成为jpeg最常用的编码方式,huffman编码通常是以完整的mcu来进行的。
编码时,每个矩阵数据的dc值与63个ac值,将分别使用不同的huffman编码表,而亮度与色度也需要不同的huffman编码表,所以一共需要四个编码表,才能顺利地完成jpeg编码工作。
dc编码 dc是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个dc值与前一个dc值的差值来编码。dc采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。
例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。
 
所谓1的补数,就是将每个bit若值为0,便改成1;bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的bit数与差值内容的对照。 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度dc差值的编码表。根据这两份表格内容,即可为dc差值加上霍夫曼码值,完成dc的编码工作。
ac编码 ac编码方式与dc略有不同,在ac编码之前,首先得将63个ac值按zig-zag排序,即按照下图箭头所指示的顺序串联起来。 63个ac值排列好的,将ac系数转换成中间符号,中间符号表示为rrrr/ssss,rrrr是指第非零的ac之前,其值为0的ac个数,ssss是指ac值所需的位数,ac系数的范围与ssss的对应关系与dc差值bits数与差值内容对照表相似。
 
如果连续为0的ac个数大于15,则用15/0来表示连续的16个0,15/0称为zrl(zero rum length),而(0/0)称为eob(enel of block)用来表示其后所剩余的ac系数皆等于0,以中间符号值作为索引值,从相应的ac编码表中找出适当的霍夫曼码值,再与ac值相连即可。 例如某一组亮度的中间符为5/3,ac值为4,首先以5/3为索引值,从亮度ac的huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的huffman编码1111111110011110100,[5,4]表示ac值为4的前面有5个零。 由于亮度ac,色度ac霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。
 
实现上述四个步骤,即完成一幅图像的jpeg压缩。具体步骤参考
图像编码基础和小波压缩技术——原理、算法和标准


JPEG文件格式简单分析


oo
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2.halcon



3.opencv-vc
#include <cv.h>  
#include <highgui.h>  
//#include <math.h>  
  
int main()  
{  
  
    IplImage* src = cvLoadImage( "E:\\cs\\halcon\\bookcd\\document\\图像处理标准图像库\\lena.jpg", -1 );  
    IplImage * Red = cvCreateImage( cvGetSize(src), 8, 1);  
    IplImage * Green = cvCreateImage( cvGetSize(src), 8, 1);  
    IplImage * Blue = cvCreateImage( cvGetSize(src), 8, 1);  

    cvSplit(src,Blue,Green,Red,0);  //B G R
  
    cvNamedWindow( "RedChannel", 1 );  
    cvNamedWindow( "GreenChannel", 1 );  
    cvNamedWindow( "BlueChannel", 1 );  
    cvNamedWindow( "src", 1 );  
  
    cvShowImage( "RedChannel", Red );  
    cvShowImage( "GreenChannel", Green );  
    cvShowImage( "BlueChannel", Blue );  
    cvShowImage( "src", src );  
  
    cvWaitKey(0);  
    cvReleaseImage( &Red );  
    cvReleaseImage( &Green );  
    cvReleaseImage( &Blue);  
    cvReleaseImage( &src );  
  
    return 0;  
}  




refer to
http://blog.csdn.net/boyhailong/article/details/7028796
http://www.linuxgraphics.cn/graphics/image_processing_rgb_to_grayscale.html
http://wenku.baidu.com/view/f2cbc9116c175f0e7cd13743.html



用ultraedit打开jpg文件,开头是
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01
00 01 00 00 FF ED 00 83 49 4D 41 47 45 6E 65 74

FF D8 是图像开始标记
FF E0 是APP0标记      
00 10 是APP0长度
4A 46 49 46 00 即JFIF的ASCII码
01 01 是JFIF的版本
00 是X和Y的密度单位
00 01是X方向像素密度
00 01是Y方向像素密度
00 是缩略图水平像素数目
00 是缩略图垂直像素数目
FF ED 是附加信息段开始标记
00 83 表示附加信息段长度为0x83 = 131字节(FF ED不算入内)
你从00 83处的00开始读取131字节便可以得到附加信息段

至于附加信息段的结构,似乎很多
jpeg中除了上面的FF D8,FF E0外,还有很多标记,如FF DB是量化表标记,但FF E0~ FF EF是留给应用程序自行使用的。
以ACD see(或ps)转换的jpeg格式文件为例,他使用FF E1表示附加信息段开始,acd see的附加信息段是遵循exif的(www.exif.org)
你提供的图片使用什么格式我不大清楚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值