<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} --> <!-- [endif]--><!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:DoNotShowRevisions/> <w:DoNotPrintRevisions/> <w:DoNotShowMarkup/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if !mso]> < classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </object> <mce:style><!-- st1\:*{behavior:url(#ieooui) } --> <!-- [endif]--> <!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:汉仪书宋一简; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@黑体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:汉仪中黑简; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:ˎ̥_GB2312; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:文泉驿正黑; mso-font-alt:仿宋_GB2312; mso-font-charset:134; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:汉仪中圆简; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:汉仪楷体简; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:"\@汉仪书宋一简"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:"\@汉仪中黑简"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:"\@文泉驿正黑"; mso-font-charset:134; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"\@汉仪中圆简"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} @font-face {font-family:"\@汉仪楷体简"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135137280 18 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-style-next:正文; margin-top:17.0pt; margin-right:0cm; margin-bottom:16.5pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:240%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:1; font-size:22.0pt; font-family:"Times New Roman"; mso-font-kerning:22.0pt;} h3 {mso-style-name:"标题 3\,H3\,Map\,h3\,Level 3 Topic Heading\,目题\,Org Heading 1\,H31"; mso-style-parent:""; mso-style-next:正文; margin-top:15.0pt; margin-right:0cm; margin-bottom:9.0pt; margin-left:0cm; line-height:15.6pt; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:3; font-size:14.0pt; mso-bidi-font-size:10.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; font-weight:normal; mso-no-proof:yes;} p.MsoToc1, li.MsoToc1, div.MsoToc1 {mso-style-update:auto; mso-style-noshow:yes; mso-style-next:正文; margin-top:6.0pt; margin-right:0cm; margin-bottom:8.0pt; margin-left:43.4pt; text-align:justify; text-justify:inter-ideograph; text-indent:-43.4pt; line-height:15.0pt; mso-pagination:none; tab-stops:right dotted 374.45pt; layout-grid-mode:char; mso-layout-grid-align:none; font-size:11.0pt; mso-bidi-font-size:22.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-ansi-language:ZH-CN; mso-no-proof:yes;} p.MsoToc2, li.MsoToc2, div.MsoToc2 {mso-style-name:"目录 2\,toc2"; mso-style-update:auto; mso-style-noshow:yes; mso-style-next:正文; margin-top:0cm; margin-right:0cm; margin-bottom:3.0pt; margin-left:40.25pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:3.0pt; mso-para-margin-left:2.0gd; text-align:justify; text-justify:inter-ideograph; text-indent:-20.25pt; mso-char-indent-count:-2.25; line-height:15.0pt; mso-pagination:none; tab-stops:right dotted 373.75pt; layout-grid-mode:char; mso-layout-grid-align:none; font-size:9.0pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:汉仪书宋一简; mso-ansi-language:ZH-CN; mso-no-proof:yes;} span.MsoFootnoteReference {mso-style-noshow:yes; vertical-align:super;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p.a, li.a, div.a {mso-style-name:图号; mso-style-update:auto; margin-top:0cm; margin-right:0cm; margin-bottom:8.0pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:15.0pt; mso-pagination:none; layout-grid-mode:char; mso-layout-grid-align:none; font-size:9.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:汉仪书宋一简; mso-ansi-language:ZH-CN;} p.a0, li.a0, div.a0 {mso-style-name:脚注; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:21.7pt; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; text-indent:-21.7pt; line-height:13.0pt; mso-pagination:widow-orphan; layout-grid-mode:char; mso-layout-grid-align:none; font-size:8.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:汉仪楷体简;} p.1, li.1, div.1 {mso-style-name:"标题1 章"; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:right; mso-line-height-alt:15.6pt; mso-pagination:widow-orphan; font-size:19.0pt; mso-bidi-font-size:10.0pt; font-family:Helvetica; mso-fareast-font-family:汉仪中圆简; mso-bidi-font-family:"Times New Roman";} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:232391948; mso-list-type:hybrid; mso-list-template-ids:-1347239884 67698699 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} @list l0:level2 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:42.0pt; mso-level-number-position:left; margin-left:42.0pt; text-indent:-21.0pt; font-family:Wingdings;} @list l1 {mso-list-id:752505142; mso-list-type:hybrid; mso-list-template-ids:-2066086378 67698699 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} @list l2 {mso-list-id:1578369341; mso-list-type:hybrid; mso-list-template-ids:1456228936 -1 -1 -1 -1 -1 -1 -1 -1 -1;} @list l2:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} @list l3 {mso-list-id:1869025564; mso-list-type:hybrid; mso-list-template-ids:209631052 67698699 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l3:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> <!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} --> <!-- [endif]--><!-- [if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1027"/> </xml><![endif]--><!-- [if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->
<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:414.75pt; height:545.25pt'> <v:imagedata src="file:///C:\DOCUME~1\hunnish\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" mce_src="file:///C:\DOCUME~1\hunnish\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" o:title="learning_opencv-tup"/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
重点指数: (重点-畅销)
基本信息
书名: 学习 OpenCV (中文版)
著译者: ( 美 )Gary Bradski Adrian Kaehler 著 于仕琪 刘瑞祯 译
I SBN : 978-7-302-20993-5
责编: 定价: 75 元
出版日期: 2009 年 9 月 版次: 1 版 1 次
编目分类: TP
读者定位: 信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等专业人员
开本: 178 × 233 印张: 39.25
字数: 800 千字 页数: 650
装帧:平装 版别:翻译版
陈列建议:计算机-计算机视觉
内容提要(卖点):四博士联袂推出的OpenCV经典教程
编辑推荐: 用 白话方式,介绍 OpenCV 和计算机视觉基础。在全球,已经有近 220 万 用户下载并使用 OpenCV Library 。在中国,至少有 40 万 用户已经下载将 OpenCV 用于商业用途。但相关图书,国内少之甚少。针对如此广泛的需求,我们特别提供由四位博士联手呈现的新书《学习 OpenCV( 中文版 ) 》。
内容简介:
计算机视觉是在图像处理的基础上发展起来的新兴学科。 OpenCV 是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
本书由 OpenCV 发起人所写,站在一线开发人员的角度用通俗易懂的语言解释了 OpenCV 的缘起和计算机视觉基础结构,演示了如何用 OpenCV 和现有的自由代码为各种各样的机器进行编程,这些都有助于读者迅速入门并渐入佳境,兴趣盎然地深入探索计算机视觉领域。
本书可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供相关领域的研究工作者参考。
透过本书,您将置身于迅速发展的计算机视觉领域。本书由自由开源 OpenCV 的发起人所著,介绍了计算机视觉,并通过实例演示了如何快速生成这样的应用——能使计算机“看到”并根据由此获取的数据做出决策。 .
计算机视觉无处不在,安全系统、制造检验系统、医学图像分析、无人机等都可以见到它的踪影。它与 Google Map 和 Google Earth 紧密结合,它检查 LCD 屏幕上的像素,它确保衬衫上的每个针脚都能完全缝合。 OpenCV 提供了一个简易好用的计算机视觉框架和一个丰富的库,后者包含 500 多个可实时运行视觉代码的函数。
透过各章提供的练习,任何一个开发人员或爱好者都可以迅速掌握如何使用这个框架。本书特色主题如下:
<!-- [if !supportLists]-->Ø <!-- [endif]-->透彻介绍 OpenCV
<!-- [if !supportLists]-->Ø <!-- [endif]-->从摄像机获取输入
<!-- [if !supportLists]-->Ø <!-- [endif]-->图像的变换
<!-- [if !supportLists]-->Ø <!-- [endif]-->图像的分割和形状的匹配
<!-- [if !supportLists]-->Ø <!-- [endif]-->模式识别,包括人脸检测
<!-- [if !supportLists]-->Ø <!-- [endif]-->二维和三维场景中的跟踪监测
<!-- [if !supportLists]-->Ø <!-- [endif]-->根据立体视觉进行三维重构
<!-- [if !supportLists]-->Ø <!-- [endif]-->机器学习算法
“让机器来看”是一个富有挑战但也很有意思的目标。不管是想构建简单的视觉应用,还是复杂的视觉应用,都离不开这本入门必备参考,拿起它,开始愉快的学习之旅吧!
“我来说两句”
“ OpenCV 库对从业人员而言非常有用,对初涉该领域的新手而言也不失为一个优秀工具。正如其广而告之的那样,它是一套高效的计算机视觉算法。 ”
——William T. Freeman ,麻省理工学院计算机科学与人工智能实验室
“对计算机视觉领域内任何一个从业人员而言,《学习 OpenCV 》是他们不可或缺的重要参考。 ”
——David Lowe ,英属哥伦比亚大学计算机科学教授
Gary Rost Bradski 博士是斯坦福大学人工智能实验室计算机科学系的顾问教授,同时也是 Willow Garage 的资深科学家, Willow Garage 是一家机器人研究机构 / 孵化器。
Adrian Kaehler 博士, Applied Minds 公司的资深科学家,负责指导机器学习、统计建模、计算机视觉和机器人方面的研究。
译者简介
于仕琪 博士 供职于中国科学院深圳先进技术研究院,担任助理研究员。 OpenCV 中文网站( http://www.opencv.org.cn )的主要维护人。 2007 年北京 OpenCV 研讨会的组织者,邀请 OpenCV 开发者 Vadim Pisarevsky 和其他一些专业人员前来布道。目前主要研究方向是计算机视觉和模式识别。
刘瑞祯 博士 中国国内 OpenCV 推广的先行者,第一个 OpenCV 中文论坛的创办人。毕业于中国科学院自动化研究所模式识别国家重点实验室,目前从事智能图像识别与机器视觉方面的产业化工作。
Preface for Chinese Translation
Since the writing of book, OpenCV is now actively supported by Willow Garage(http://www.willowgarage.com), a robotics research institute located in Menlo Park , California.During the time when OpenCV had less support, Shiqi Yu helped out by producing a Chinese translation of OpenCV documentation. It is therefor fitting that Shiqi has continued on to produce the Chinese translation of this book. The Chinese translation timing is also nicely aligned with the new release 2.0 of OpenCV in September 2009. You can find links to current information on OpenCV at the main wiki page at http://opencv.willowgarage.com which links to the detailed page at http://opencv.willowgarage.com/wiki/FullOpenCVWiki. The new OpenCV releases are detailed in http://opencv.willowgarage.com/wiki/Welcome/Introduction#Announcements.
Applications for computer vision and machine perception are growing rapidly. For example, many people are familiar with face detection now available on consumer cameras. Many of those face detection techniques are adapted from the face detection algorithms developed in OpenCV. But, many people are not aware of just how important computer vision already is for manufacturing. Almost nothing is manufactured these days without making use of video inspection equipment, cameras now monitor fruits and vegetables for blemishes, make sure that the labels on products are put on in the right place, watch to make sure cloth has no flaws, or that each pixel works on an LCD screen and much more. Many of these applications make use of OpenCV routines, many such systems are deployed in China .
Computer vision also has growing uses in monitoring and safety. Some people are aware of security cameras in airports and train stations, but fewer people know that cameras are also increasingly used to monitor mine equipment, prevent drownings in swimming pools and watch traffic flow and accidents on freeways. OpenCV, with its BSD license, encourages commercial use and so is deployed on many of these monitoring systems. When you search the web, many of the image processing routines run by Google make use of OpenCV. These uses range from helping stitch satellite and airplane images together in Google Earth and Google Maps, but also to stitch street scenes together and align the imagery with laser scans in Google Street View.
Computer vision has many uses on the web, such as in the Video summary produced by Video Surf http://www.videosurf.com/ or for image retrieval by all the major search engines. There is a positive feedback here because the more images there are on the web, the more training data becomes available such as LabelMe http://labelme.csail.mit.edu/ data bases or Tiny Images http://people.csail.mit.edu/torralba/tinyimages/ collection. Additionally, more and more researchers are using Amazon's Mechanical Turk service https://www.mturk.com/mturk/welcome to label images databases for pennies per image and tools are appearing to make such labeling tasks easier to run http://pr.willowgarage.com/wiki/ROS/mturk . The training data from these databases and services helps improve computer vision algorithms.
By coincidence, both authors of the OpenCV book now work in robotics where sensor perception is the main obstacle to enable wide deployment of robotics. Robots will be useful for elderly care, for agriculture, for services and for manufacturing. Robots have been doing well at navigation and mapping http://www.youtube.com/watch?v=qRrMHaO6NpE but the real key to unleashing a mobile robotics industry is perception for manipulation. Robots need to be able to see objects reliably in order to manipulate and build things. There is still much work to do to make perception reliable, and that is one of the reasons why OpenCV is open -- to collect the best work of the top people in order to enable seeing machines. Recently there have been many advances in mobile manipulation http://www.youtube.com/watch?v=0S2dc_B-6Kg but much more work remains to be done. Fortunately, OpenCV is keeping up and now does a major release every?6 months with daily improvements available from the source code repository http://sourceforge.net/scm/?type=svn&group_id=22870 .
I thank Shiqi Yu and Ruizhen Liu for their translation of this book. People who work in open source do their work for all of humanity and not for any specific country, company or group. OpenCV was designed to accelerate human knowledge and capability by making advances in knowledge available to everyone. This is an optimistic view of humanity but it depends on contributions back. We encourage top scientists and developers in China to learn OpenCV and to?contribute their advances back to the effort.
Gary Bradski
Senior Scientist, Willow Garage
Consulting Professor, Stanford University , CS Dept.
[email protected]
September 2009
出版前言
在 CMU( 卡内基 · 梅隆大学,全球计算机专业三强之一 ) , A. 纽维尔教授时常饱含热情地对学生说:“世界上有这么多 ‘ 为什么 ?’‘ 要是能解决那些问题该有多好啊? ’ 这样的问题仿佛时时刻刻都在呼唤: ‘ 解决我吧,弄清我吧! ’ 像等待着恋人那样在等着我们这些研究者去解决它们。”作为出版工作者,我们时常也能听到这样的声音,吸引着时常以“超级好奇宝宝”自诩的我们循声而去并付诸实践。
在一次偶然的事件中,我们对计算机视觉发生了浓厚的兴趣。这是专门研究如何让机器 ( 即摄像机和计算机 ) “看”的科学,这些机器可用来定性或定量地分析图像中各目标之间的相互联系,并通过对这些图像内容含义的理解来解释场景。无论是研究人员或从业人员,还是门外汉,这都是一件多么有趣又富有挑战的事情啊!
循着计算机视觉这一主线, OpenCV 自然成为我们感兴趣的焦点。作为一个跨平台的计算机视觉库, OpenCV(Open Source Computer Vision Library ,开源的计算机视觉库 ) 最初由 Intel 公司发起并开发,以 BSD 许可证授权发行,可免费用于商业和研究领域。它包含许多常用的算法,已经广泛应用于对实时性要求较高的计算机视觉和模式识别系统的开发。截至 2009 年 8 月,在 sourceforge.net 的下载次数已经超过 2 200 000 次,大量用户来自中国。 OpenCV 中文网站 (http://www.opencv. org.cn ) 通过提供丰富的中文资料为 OpenCV 在中国的推广做出了巨大贡献,吸引着越来越多的新手参与 OpenCV 的学习、使用和贡献中。
随着对 OpenCV 的深入了解,我们把眼光投向 O’Reilly Media 。它是一家在技术圈内享有盛誉的出版公司。我们一向倾慕于其创始人 Tim O'Reilly 的出版理念: “All of our editors are expected to get their hands dirty with the technology we publish about. Many are former programmers, system administrators, technical writers, or practicing scientists, and all are expected to have written at least one successful book of their own. Because we’re close to the industry, we know what books are really needed, and we make sure they tell people what they really need to know. ”
他们在适当的时候推出了 Learning OpenCV 这本优秀的教材。在浮夸之风盛行的当下 , 书名中的 Learning 显得格外清新、朴实 , 一种久闻的亲切感油然而生。书中广泛探讨的计算机视觉算法与理论,丰富的实例,清晰的结构,简繁适当的写作风格,无不引人入胜。对于更注重技术细节的专业人士而言,本书作者的背景和本书内容的组织和呈现方式可能更具有吸引力。关于 Gary 和 Adrian 的介绍,可参见书后的“关于作者和译者”。
顺利引进此书之后,更关键的工作之一便是物色“双优”译者。何为双优呢?优秀的专业知识背景 + 优秀的中英文文字功底。我们何其幸运,一发出邀请,国内 OpenCV 的先行者刘瑞祯和于仕琪两位博士便爽快地答应出手相助。感谢他们能在百忙之中贡献自己的休息时间参与本书的翻译,这是源于他们对于 OpenCV 的一往情深,源于他们对于计算机视觉领域难以割舍的情结,源于他们肩负的知识传播的使命感。
在翻译过程中,译者所表现出来的严谨、认真给我们留下了深刻的印象。整个沟通过程是令人愉快的。对于编辑提出的疑问,他们充分体现出他们的专业精神,以科学的态度负责任地加以肯定或否定。在这个互动过程中,我们受益良多。相信在他们的帮助下,学习 OpenCV 将成为一件轻松的事情。
为保证此书的尽善尽美,我们还有幸邀请到清华大学电子工 程系 博士研究生段菲对本书进行审阅。他曾经翻译过非常畅销的《 DirectX 3D 游戏开发编程基础》和《精通 3D 图形编程》。在我们的印象中,他是一个一丝不苟、地道的 science guy ,对技术抱有超常的激情。在解决疑问的时候,他会现场进行验算。对于本书,他以专业的眼光进行了仔细审阅。在此向他表示衷心的感谢!
在编辑此书过程中,为方便读者快速定位,为方便读者快速定位自己希望了解的知识点,我们保留了原书索引,并在正文中相应位置标注了原书页码 ( 见标记符【】 ) ,希望能为读者提供少许帮助。
OpenCV 在国内的应用情况如何呢?我们有幸从大恒 王亚鹏 先生那里获得了答案。作为行业领跑者,他抽出宝贵的休息时间与我们分享了他们最终选用 OpenCV 的历程,也让我们对本书能为 OpenCV 做出贡献大有信心。在此也向他致以诚挚的谢意!
任何一种技术,仅有赞助者是不够的,仅有充满激情的开拓者也不够的,还必须有执着的“传教士”,还必须有忠实的跟随者。 OpenCV 何其幸运,有优秀的公司 ( 早期的 Intel 和现在的 Willow Garage) 做支撑,有 Gary Bradski , Adrian Kaehler ,刘瑞祯和于仕琪这样乐于分享的“知识传播者”,有 Google 等优秀企业的开发人员积极参与和无私奉献,它的前景是可以预知的。计算机视觉是一个新兴领域,一个可以由天马行空自由创造的天地,一块等待着您留下脚印的“尚未凝固的水泥地” ( 注—— 明可夫斯基教授曾为迷茫中的爱因斯坦开“处方”,指导他大胆创新和开拓 ) 。
亲爱的读者朋友们,这本书是否也能点燃您对您产生这样的激情呢?拿起它,开始令人心动的新旅程吧!正如济慈所说:“ Now it appears to me that almost any Man may like the spider spin from his own inwards his own airy Citadel - the points of leaves and twigs on which the spider begins her work are few, and she fills the air with a beautiful circuiting. ( 在我看来,几乎人人都可以像蜘蛛那样,从体内吐出丝来结成自己的空中堡垒。她开始工作时,只凭借着树叶和树枝的几个尖儿,然后来回兜转,最后竟使空中布满了美丽迂回的路线。”希望我们也能借助于简单的“树叶和树枝的几个尖儿”,构筑起自己的城堡,计算机相关领域的城堡,共同共享自己微薄的力量。作为这一战线上的盟友,我们期待着您的任何意见和建议,电子邮箱 [email protected] 期待着您与我们分享这个旅程中的点点滴滴!
清华大学出版社
2009 年 9 月
译者序
计算机视觉是在图像处理的基础上发展起来的新兴学科,在计算机科学和工程、信号处理、物理学、应用数学和统计学,神经生理学和认知科学等研究方面,在制造业、检验、文档分析、医疗诊断,和军事等领域等各种智能/自主应用方面,都有非常广阔的发展前景。
由于涉及到如此多的专业知识,对普通的研发人员而言,计算机视觉颇有些阳春白雪的意味。其实这种意味来自于两个方面,即它是学术研究与工程开发的集合体。纯粹的研究人员,在有好的想法或者概念情况下,需要一个工程开发工具来验证自己的想法,这个开发工具必须是简单而易用的;工程人员则由于专业背景知识的缺乏,非常难以介入到计算机视觉领域。而 OpenCV 恰恰为这两者的结合提供了一个得心应手的开发工具或者应用平台。
OpenCV 作为一个开放源代码的应用平台,最大程度上体现出“众人拾柴火焰高”的开放精神。有大量的 OpenCV 学习资源可以在互联网上找到,这里译者深深感谢互联网的发展,一言以蔽之,没有互联网,就没有 OpenCV 。因此 OpenCV 发展到今天,已经快速从少数人的兴趣爱好逐步转变为一个系统的、有科研和商业应用价值的研发平台。
这几年在中国,译者很欣喜地看到越来越多的学生、科研人员和应用开发人员开始在计算机视觉的研究和工程应用领域使用 OpenCV ,并逐步把 OpenCV 作为自己所从事职业的一个忠实伙伴。
作为 OpenCV 项目的发起人, Gary Bradski 和 Adrain Kaebler 所撰写的 Learning OpenCV 一书,对 OpenCV 的很多基本算法函数都给出了详细的阐述,并且对函数算法的说明也非常到位。在阅读本书的过程中,读者不但有“知其然”,而且有“知其所以然”的感受。
本书在介绍计算机视觉各个算法思想的同时,通过大量的程序样例,给读者以启发和引导,始终体现出“学以致用”的精神。特别是每章之后的练习,让读者在浏览各章节内容的基础上,借此做更进一步的思考,对读者在视觉算法思想的领悟和视野的拓展大有裨益。“桃李不言,下自成蹊”,对本书真实价值的最有效评判,其实是来自于广大的读者。
翻译本书的过程对于每位译者而言,既是再次学习和思考的历程,也是追寻作者提出问题、分析问题、解决问题的思维过程。“嘤其鸣矣,求其友声”,本书翻译的过程虽然并不短暂,译者却无过多艰辛之感,原因大致是在翻译的路途上,我们既体味到作者在本书中所展现的灵动思维,也感受到广大同行对本书进展的热情关注。换言之,译者不是在独自前行。
参与翻译本书的人员还有徐明亮、孙涛、柴树杉、吴佳、周磊、罗明、武思远、马长正、陈瑞卿等人。感谢他们的辛勤工作。本书的翻译与其说是几个人的工作,毋宁说它是 OpenCV 爱好者集体工作的结晶。译者感谢清华大学出版社给予我们这样一个难得的机会。
刘瑞祯
2009 年 9 月于北京
写在前面的话
“工欲善其事,必先利其器”,古代的剑客会像爱护自己的手足一样珍惜自己的剑,因为他懂得在决斗中拥有适合自己的武器往往是克敌制胜的关键。对于从事机器视觉应用技术开发的工程师来说,他们所追求的是功能强大同时又快捷高效的工具,既能保证开发出来的视觉系统足以满足复杂应用现场的实际需求,又能快速完成一系列复杂算法的开发。毫无疑问,每个优秀的视觉技术开发人员都会认真地考虑自己所选用的开发工具。如果说 VC++ 是视觉技术开发人员不可或缺、随身必备的军刀,那么 OpenCV 就是他们冲锋陷阵时渴望拥有的冲锋枪,它带给开发人员两个重要的法宝—— 威力、速度,它对企业和开发人员具有两大“致命”诱惑—— 开放源码、完全免费。
中科院中国大恒集团下属的北京大恒图像视觉有限公司作为国内最早成立的专业从事机器视觉产品开发的公司,一直专注于自有产品、自有技术的研发,也经历了从最初在 DOS 操作系统下的汇编语言、 C 语言一直到目前 Vista 操作系统下的 Visual Studio 等基础开发工具的升级换代过程,到现在形成了 VC++ 、 IPP 、 OpenCV 、 Halcon 等多种工具并用的局面。说到 OpenCV ,就不得不提起 Intel 公司在 1996 年发布的著名的奔腾处理器和 MMX ( Multi Media Extended )技术,也可以说正是奔腾处理器和 MMX 技术的出现把机器视觉技术在各领域中的实际应用发展推向了快车道。我们都知道基于数字图像处理和模式识别等技术的算法运算量一般都非常之大,所以在早期用计算机对一幅图像做个基本的处理都要花费很长的时间,这一瓶颈严重制约了机器视觉技术在实际应用领域的发展,所以评价一个视觉算法程序开发质量的重要指标之一就是运算速度,一直到现在的多核处理器时代仍然如此。而 Intel 公司的 MMX 技术以及后来的 SSE ( Streaming SIMD Extensions )技术的出现使得机器视觉算法的开发人员看到了希望的曙光,这种基于单指令多数据的多媒体指令集技术可以使得图像处理算法的运行速度几倍甚至十几倍的提高,然而要想使用好该技术就必须面对令人头疼的汇编语言,算法开发和优化需要花费比较多的时间才能完成。
对于追求开发效率的机器视觉应用开发企业来讲,希望的是既能开发出性能优越的视觉系统,又能尽量提高开发效率、降低成本,大恒图像也在这方面经历了若干次选择。最初是选择了 Intel 公司的 IPL 及 IPP ,这里面的函数都是采用了 MMX 或 SSE 技术优化的,是很优秀的图像处理库,但这里面大都是比较基础的图像处理函数,不能满足复杂的应用技术快速开发的要求,而且还有一点就是不能开放源代码。 OpenCV 的出现使得每个机器视觉技术的开发人员都眼前一亮,它不仅是完全免费的开源软件,更可贵的是它包含的各类图像处理及识别的函数非常丰富,而且一般都利用 MMX 及 SSE 技术进行了很好的优化!我是从 2001 年开始接触 OpenCV ,虽然公司里的算法工程师都很快喜欢上了 OpenCV ,虽然我们从 2002 年起就正式地在产品的开发中使用了 OpenCV ,虽然 OpenCV 已经成为视觉算法开发部必备的开发工具之一,但说句实在话我一直心有疑虑,我担心的是会不会哪一天 Intel 公司突然宣布 OpenCV 要收费,当然我的担心也是缘于我计划把我们公司自己开发的算法库建立在 OpenCV 的基础之上。幸运的是我的这种担心被 Intel 公司的 IPP 首席设计 师李信宏 先生化解了,这还要感谢本书的两位译者 刘瑞祯 博士和 于仕琪 博士,正式在他们组织的一次 OpenCV 的研讨会上我结识了 李信宏 先生和来自 OpenCV 开发组的 Vadim Pisarevsky 先生, 李信宏 先生亲口告诉我说 Intel 公司 不会这样做,我信了,我相信 Intel 公司是可以用他们强大的 CPU 的赢利来支持 OpenCV 的,我也因为 OpenCV 成为了 Intel CPU 的忠实拥护者。
margin-bottom: 8pt; line-height: 15pt; ver