颜色空间,图像格式,彩色转灰度函数-程序员宅基地

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
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文件格式挖掘
将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@[email protected])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


转载于:https://www.cnblogs.com/-song/archive/2012/03/25/3331882.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30505043/article/details/101080205

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签