<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>弱者道之用</title>
	<link>http://blog.verycd.com/ari/req=showblog</link>
	<description>弱者道之用 Syndication</description>
	<pubDate>Thu, 16 Jul 2009 18:20:11 +0800</pubDate>
	<webMaster>no-reply@mail.verycd.com (VeryCD.com 分享互联网社区)</webMaster>
	<generator>Invision Community Blog</generator>
	<ttl>60</ttl>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ari" type="application/rss+xml" /><feedburner:emailServiceId>ari</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>很久不读书 </title>
		<link>http://feedproxy.google.com/~r/ari/~3/LyzcM20zyGY/showentry=55486</link>
		<category>私——生活记录</category>
		<description><![CDATA[【楷体部分为转帖，借别人的话来说说自己吧。】 <br />很久沒看書，僅有的一點休息時間統統花在美劇和開心網。好像讀書是一種折磨。 <br /><br />怎麼會，我依然記得摩挲書頁的安寧，依然能回憶起讀到興起時努力壓抑激動，緊咬牙齒的感覺。但是，一切都好遠了。 <br /><br />十幾歲的時候，不知不覺讀了很多書，饑不擇食的那種。曾經因為信仰，一字不落地背誦毛主席詩詞和南唐二主詞，聽最討厭的歷史課時默寫在筆記本上。也有一度迷戀傳記，看大部頭的李煜傳，納蘭性德傳，溥儀傳，康熙傳，乾隆傳，張愛玲傳，翻來覆去看各個版本的毛澤東傳，還有無數記不清的誰誰的傳記，有些是繁體豎行排版，看起來很費眼睛。還喜歡過一陣子科幻，整天蹭別人的科幻世界看，倪匡的衛斯理系列七十幾本戰戰兢兢心情抽緊地看了一半之後，完全摸清了老爺子的敘事手法，於是罷看。不得不承認，那的確是消磨時光的好東西。也喜歡過李敖，每天瘋了似的反複讀反複讀仅有的两本书，越讀越心情戰慄，甚至激動得熱淚盈眶，是爲了激昂的青春麼？現在我甚至想不起那本書叫什麽名字，只記得扉頁有李敖年少時和一個喚作小蝶的姑娘的合影。還有孔慶東，石康，王躍文，包括很多的官場小說，那個年紀不懂意識形態卻能看得那麼帶勁。還有亂七八糟架子上的書，只要夠得到。真的饑不擇食。記得很清楚，初中时候上政治课，同桌在底下看还珠格格，我在看厚黑学。现在想想，真可怕，那时候小小的我心里肯定藏了很多格格不入的东西。十幾歲，別的孩子在拼命長身體的時候，那些文字餵養了我，溶化在身體里。 <br /><br />总有些人能把文字写到你的心里。 <br />或者说，总会在看到某些文字的时候会心一笑。 <br />我的时间去了哪里？美剧和音频版的《明朝那些事儿》。 <br />看书好像大都是本科时候的事情。 <br />倪匡的卫斯理前前后后看得七零八落，租书的地方看得到的亚洲之鹰之类的后来在网上却没能找到电子版。 <br />黄易的寻秦记和大唐双龙，真是让人体会到了洛阳纸贵。 <br />每每出了新书，连去租都要预约，还要应承老板在半天之内还来。 <br />当时只是看着舍友们去追，我却很难体会。后来倒也花了不少时间在电脑前面扫了一遍。 <br /><br />王小波、陈染、王跃文他们的精神家园也让我去逛了一大圈， <br />结果没有去过兵马俑和延安之类的。 <br />一直都生活在别处，希望能早点回到未来。]]></description>
		<pubDate>Sat, 27 Jun 2009 18:13:26 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=55486</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=55486</feedburner:origLink></item>
	<item>
		<title><![CDATA[matlab figure最大化方法[转]]]></title>
		<link>http://feedproxy.google.com/~r/ari/~3/x4W8YTWrKkg/showentry=55423</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[方法一（by happy）：<br /><br />h = figure;<br />set(gcf,'outerposition',get(0,'screensize'));<br /><br />方法二（by eight）：<!--fonto:--><span style="font-family:"><!--/fonto-->h = figure;<br />set(gcf,'units','normalized','position',[0,0,1,0.9]);<!--fontc--></span><!--/fontc--><!--fonto:--><span style="font-family:"><!--/fonto-->摘自：<a href="http://www.chinavib.com/forum/thread-37553-1-1.html" target="_blank">http://www.chinavib.com/forum/thread-37553-1-1.html</a><br /><br />Ari摘自： <a href="http://hi.baidu.com/friendchj/blog/item/9bd50ef328361ac30b46e085.html" target="_blank">http://hi.baidu.com/friendchj/blog/item/9b...c30b46e085.html</a><!--fontc--></span><!--/fontc-->]]></description>
		<pubDate>Thu, 28 May 2009 16:47:38 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=55423</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=55423</feedburner:origLink></item>
	<item>
		<title>vc工具集</title>
		<link>http://feedproxy.google.com/~r/ari/~3/aHroaVuRqLg/showentry=55392</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[Project   Line   Counter   <br />  <a href="http://www.wndtabs.com/" target="_blank">http://www.wndtabs.com/</a>   <br />    <br />  看名字就知道是做什么的啦<br />  <br />Workspace   Whiz   <br />  <a href="http://www.workspacewhiz.com/" target="_blank">http://www.workspacewhiz.com/</a>   <br />    <br />  give   you   more   control   with   VC   &   VS.net<br />Visual   Assist   <br />  <a href="http://www.wholetomato.com/" target="_blank">http://www.wholetomato.com/</a>   <br />    <br />  this   is   very   high   recommanded!!!   <br />  Everybody   should   have   one.<br />  <br />  SmartHelp   <br />  <a href="http://fly.cc.fer.hr/~gmit/smarthelp.htm" target="_blank">http://fly.cc.fer.hr/~gmit/smarthelp.htm</a>   <br />    <br />  looks   not   very   good,   but   source   code   is   available.   <br />    <br />  BTW,   WndTabs'   source   code   is   available,   too.<br />  <br />  CommentWizard   <br />  <a href="http://www.tenasoft.com/" target="_blank">http://www.tenasoft.com/</a>   <br />    <br />  and   you   will   be   satisfied   with   CommentWizard's   professional   comment!<br />  <br />  哦，以前关于图形我都用这个PhotoImpact   <br />    <br />  其他辅助工具很少用，除了一个免费软件，人人都会写的   <br />    <br />  就是看一个工程一共有多少行源码的（极力推荐）<br /> 如果Visual assist 不好用,那就试试CodeRush,CodeRush挺好的 <br />  <br />processview   <br />  depends   <br />  spy++   <br />  softice   <br />  windiff   <br />  error   lookup   <br />  socspy32   用来看socket的调用   <br /><br />Depends,查看一个模式库的依赖关系，同时看看import和export函数的哪些.   <br />  特别适合当一个程序因缺少库不运行时，查看到底少了什么库.   <br />    <br />  com   explorer,要看系统的com注册.或者注册/卸载一个com.   <br />    <br />  Spy++,不用多说了@_@.   <br />    <br />  W32Dasm，加解密时用,VC作为hex编辑的辅助工具.   <br />    <br />  还有...想起来再说吧@_@<br /><br />DevPartner   Studio,包含了以大套工具，包括了上面的ｂｏｕｎｄｓｃｈｅｃｋｅｒ<br /><br />1.   Visual   Assist   确实太好了，所以不得不重复楼上的   <br />  2.   Rational   Purify，运行时错误调试，比BoundsChecker稍好   <br />  3.   Rational   Quantify,   Profiler软件，可用于检测运行速度的瓶颈   <br />  4.   Parasoft   C++   Test,   可通过静态和动态测试分析你的代码中潜在的错误，非常酷。   <br />  5.   Doxygen，可帮助你实现文档和代码的一体化，免费软件，强力推荐。   <br />  还有一些小工具和宏，可能不一定这么通用了。<br /><br />我使用过DDK，Driver   Studio（开发驱动的） <br /><br />我推荐Visual   Assist     <br />  这是我最常用的插件   <br />  <br />  <br />我还用过很多制作安装盘的软件，不包括installshield。我用过easysetup，setupfactory。都是制作安装盘的不错的软件。不过免费的只是demo版。我还用过制作帮助文件的软件，visualhelp是一个不错的制作帮助文件的软件。<br /><br /><br />主要使用的是BoundsChecker：查内存及资源泄露，不过有时误报   <br /><br /><br />]]></description>
		<pubDate>Wed, 13 May 2009 19:35:17 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=55392</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=55392</feedburner:origLink></item>
	<item>
		<title><![CDATA[[杂乱]tips]]></title>
		<link>http://feedproxy.google.com/~r/ari/~3/sGCCg_4gaiQ/showentry=55391</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[vc中载入flash资源<br /><br />1.工程区的 resource树中，鼠标右键-&gt;import,<br />2.选择 *.swf文件；<br /><br />3.Resource type 里输入 "SWF"，包括双引号；<br /><br />4.swf被以二进制方式导入资源中；<br /><br />5. CMyDlg::OnInit() 里加入如下代码：<br /><br />CString Type="swf";<br />HRSRC res=FindResource (NULL,MAKEINTRESOURCE(IDR_SWF1),Type);<br />HGLOBAL gl=LoadResource (NULL,res); <br />//返回指向资源内存的地址的指针<br />LPVOID lp=LockResource(gl);<br />//保存的临时文件名<br />CString filename="search.swf";<br /><br />HANDLE fp= CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);<br />DWORD a;<br />//sizeofResource 得到资源文件的大小<br />if (!WriteFile (fp,lp,SizeofResource (NULL,res),&a,NULL))<br />return 1;<br />//关闭句柄<br />CloseHandle (fp);<br />//释放内存<br />FreeResource (gl); <br /><br />//查找flash文件并加载<br />TCHAR strCurDrt[500];<br />int nLen = ::GetCurrentDirectory(500,strCurDrt);<br />if( strCurDrt[nLen]!='&#092;&#092;' )<br />{<br />strCurDrt[nLen++] = '&#092;&#092;';<br />strCurDrt[nLen] = '&#092;0';<br />}<br /><br />CString strFileName = strCurDrt;<br />strFileName += "search.swf";<br />m_MyFlash.LoadMovie(0, strFileName);<br />m_MyFlash.Stop();<br /><br />问：<br />我要在VC下下断点调试,但是程序Main需要输入两个参数才能运行,怎样设置才能单步调试啊? 如:我必须在cmd窗口中键入 test.exe aa.bmp 才能运行,怎么单步调试,设置两个路径参数?<br />答：<br />在VC里有输入main参数的选项。。 <br />Alt+F7项目设置-》Debug标签-》Program arguments<br /><br /><br />fatal error LNK1104: cannot open file "mfc42u.lib"错误<br />问题是默认的VC缺少对Unicode的支持。要使用Unicode编译：解决方案很简单，从VC的安装盘中拷贝文件“MFC42U.LIB”、“MFC42UD.LIB”、“MFCS42U.LIB”、“MFCS42UD.LIB”几个对Unicode支持的代码“VC的安装目录/VC98/MFC/Lib”下即可。<br /><br /><br />介绍你看 <br />《操作系统概念》——操作系统的圣经 <br />《linux内核解析与应用》——好像是叫这个名字，书很薄，但对理解linux，操作系统概念很有益处。 <br />《internal windows》——深入解析windows，windows程序员必看。 <br />如果对内核感兴趣，推荐看这本书《操作系统：设计与实现》(第三版)，绝对的经典之作！<br />《linux内核完全剖析》<br /><br /><br />学习数据库最值得看那几本书<br />sql编程实用大全精华版，这本书比较好，一个知识点就有一个实例，可以在网上找得到<br />我觉得《SQL   入门经典》不错，清华大学出版社的，浅显易懂，强烈推荐。<br />oracle10gDBA宝典 <br />电子工业出版社的，我认为是很好的一本参考书！2006年12月分出的<br />&lt; &lt;sql必知必会&gt;&gt;挺不错<br />《SQL Cookbook》，CSDN上有英文版的CHM下载，你可以下了看一下，感觉还是不错的。<br />《数据库原理》《数据库技术应用实践教程》《sql server2005中文版精粹》<br />1、买一本有关数据库的基础入门书，建议直接学习sql server 2000，不要求版本太高，实用就成。推荐赵松涛的《sql server 2000 系统管理与应用开发》有点厚，不过很详细，也适合操作。<br />2、在自己的机器上安装SQL SERVER 2000企业版软件  搭建实习环境，或者用VMware安装虚拟再安装SQL SERVER2000运行环境。<br />一本很好的书《ADO编程技巧》，还有下载一些管理系统的源代码研究，主要还是自己多编一编<br /><br />]]></description>
		<pubDate>Wed, 13 May 2009 19:24:38 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=55391</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=55391</feedburner:origLink></item>
	<item>
		<title>油画、浮雕效果实现</title>
		<link>http://feedproxy.google.com/~r/ari/~3/2f86rGIPzT0/showentry=54999</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[转自csdn<br /><br /><!--quoteo--><div class='quotetop'>引用</div><div class='quotemain'><!--quotec-->photoshop的油画效果是怎么实现的楼主linsk（静默虚空）2005-06-10 10:20:44 在 专题开发/技术/项目 / 图形图像/机器视觉 提问谁能介绍相关的算法或者提供一些代码，谢谢！ <br />问题点数：0、回复次数：7<br />Top<br /> <br /><br />1 楼konriuen（伊天仇）回复于 2005-06-10 14:53:55 得分 0 方块中出现频率最高的浓度值带入中心画素<br />Top<br /><br />2 楼DarthVader（mm咋就那么白呢 唉 还是当黑炭吧）回复于 2005-06-16 10:21:05 得分 0 CSDN要是能贴图就好了<br />Top<br /><br />3 楼WallesCai（女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼）回复于 2005-06-27 00:02:32 得分 0 楼上konriuen(伊天仇)做出来的是马赛克效果,而不是油画效果<br />Top<br /><br />4 楼konriuen（伊天仇）回复于 2005-06-27 21:41:53 得分 0 马赛克效果是将领域中浓度平均，然后用此平均值带入领域全部画素<br />Top<br /><br />5 楼dayn9（无知者无罪）回复于 2005-07-01 10:23:15 得分 0 全部？感觉还是马赛克<br />Top<br /><br />6 楼WallesCai（女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼）回复于 2005-07-04 04:04:12 得分 0 马赛克效果和油画效果的差别并非是在如何取颜色值的问题，而是在于马赛克效果的“画笔”是方的。而油画效果的“画笔”是不规则的。   <br />  我感觉使用色彩分层的算法会比较接近，就是按照一定的范围取各点的色值，颜色相近的就用一种颜色来代替，颜色相近并且距离近的就直接连接（忽略中间的不同色彩，用这个替代色来覆盖）   <br />  这样做出来的效果会好点。（估计运算量会比较大）<br />Top<br /> <!--QuoteEnd--></div><!--QuoteEEnd--><br /><br /><!--quoteo--><div class='quotetop'>引用</div><div class='quotemain'><!--quotec-->浮雕效果如何实现楼主pango99（pango）2003-07-21 00:56:18 在 VC/MFC / 图形处理/算法 提问怎么实现图象的浮雕效果? <br />问题点数：0、回复次数：11<br />Top<br /> <br /><br />1 楼JFLing（）回复于 2003-07-23 14:20:32 得分 0 求每一像素点处的梯度<br />Top<br /><br />2 楼lygfqy（风清扬）回复于 2003-07-23 14:51:34 得分 0 up<br />Top<br /><br />3 楼devzhao（wincer）回复于 2003-07-23 15:44:28 得分 0 up<br />Top<br /><br />4 楼Greaitm（夜草）回复于 2003-07-24 09:03:50 得分 0 给出一个例子，以下就是135度的浮雕效果：   <br />  |1   0   0   |   <br />  |0   0   0   |   +   128   <br />  |0   0   -1|<br />Top<br /><br />5 楼shine333（enihs）回复于 2003-07-24 09:25:46 得分 0 学习<br />Top<br /><br />6 楼yangpeng_sun（baw）回复于 2003-07-24 15:29:56 得分 0 http://<br />Top<br /><br />7 楼yangpeng_sun（baw）回复于 2003-07-24 15:31:44 得分 0 希望多多关注:   <br />  www.image2003.com   <br />  <br />Top<br /><br />8 楼pango99（pango）回复于 2003-07-24 22:06:49 得分 0 To   Greaitm(夜草):   <br />  是不是该这样的呀?   <br />    <br />  |-10   0|   <br />  |0   1   0|   +   128   <br />  |0   0   0|   <br />  <br />Top<br /><br />9 楼Greaitm（夜草）回复于 2003-08-14 13:59:40 得分 0 这样也可以   这个不是死的<br />Top<br /><br />10 楼dmn（道明牛）回复于 2003-08-15 13:55:57 得分 0 浮雕效果对应到数字图像处理类似于边缘检测，它是通过对图像的每一个象素进行运算得到的，形如：   <br />  -5   0   0   <br />    0   1   0   <br />    0   0   0   <br />  的可以叫做模板。通过定义不同模板能够实现噪声、锐化、模糊等效果。   <br />  找点数字图像处理的书来看，一点找得到答案。   8-)<br />Top<br /><br />11 楼rabithao（兔巴哥）回复于 2003-08-15 14:08:47 得分 0 灰度图：   <br />  for(int   i=height;   i&gt;=1;   i--)   <br />  {   <br />  for(int   j=width;   j&gt;=1;   j--)   <br />  {   <br />  buf   =   *(lpDIBBits   +   lWidthBytes*(height-i)   +   j)   -   *(lpDIBBits   +   lWidthBytes*(height-i+1)   +   (j-1))   +   128;   <br />  if(buf&gt;255)   <br />  {   <br />  buf   =   255;   <br />  }   <br />  if(buf&lt;0)   <br />  {   <br />  buf   =   0;   <br />  }   <br />  else   <br />  {   <br />  *(data   +   lWidthBytes*(height-i)   +   j)   =   (BYTE)buf;   <br />  }   <br />  }   <br />  }<br />Top<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br />www.image2003.com/know.asp?sortid=9&knowid=46&mode=sosoo&page=1&keyword=浮雕&area=9]]></description>
		<pubDate>Sun, 04 Jan 2009 15:35:56 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54999</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54999</feedburner:origLink></item>
	<item>
		<title>Motion Analysis and Object Tracking Reference</title>
		<link>http://feedproxy.google.com/~r/ari/~3/kPY24uLJsSk/showentry=54991</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[<!--quoteo--><div class='quotetop'>引用</div><div class='quotemain'><!--quotec--><br /><b>Estimators</b><br /><br /><b>CvKalman</b><br />Kalman filter state<br /><br />typedef struct CvKalman{    int MP;                     /* number of measurement vector dimensions 测量向量维数*/    int DP;                     /* number of state vector dimensions 状态向量维数*/    int CP;                     /* number of control vector dimensions 控制向量维数*/    /* backward compatibility fields */#if 1    float* PosterState;         /* =state_pre-&gt;data.fl 前驱*/    float* PriorState;          /* =state_post-&gt;data.fl 后继*/    float* DynamMatr;           /* =transition_matrix-&gt;data.fl 转移矩阵*/    float* MeasurementMatr;     /* =measurement_matrix-&gt;data.fl 测量矩阵*/    float* MNCovariance;        /* =measurement_noise_cov-&gt;data.fl 测量噪声协方差*/    float* PNCovariance;        /* =process_noise_cov-&gt;data.fl 系统噪声协方差*/    float* KalmGainMatr;        /* =gain-&gt;data.fl 卡尔曼增益*/    float* PriorErrorCovariance;/* =error_cov_pre-&gt;data.fl */    float* PosterErrorCovariance;/* =error_cov_post-&gt;data.fl */    float* Temp1;               /* temp1-&gt;data.fl */    float* Temp2;               /* temp2-&gt;data.fl */#endif    CvMat* state_pre;           /* predicted state (x'(k)):                                    x(k)=A*x(k-1)+B*u(k) 先验状态*/    CvMat* state_post;          /* corrected state (x(k)):                                    x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) 后验状态*/    CvMat* transition_matrix;   /* state transition matrix (A) */    CvMat* control_matrix;      /* control matrix (<img src="http://bbs.verycd.com/style_emoticons/default/cool.gif" style="vertical-align:middle" emoid="B)" border="0" alt="cool.gif" />                                   (it is not used if there is no control)*/    CvMat* measurement_matrix;  /* measurement matrix (H) */    CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */    CvMat* measurement_noise_cov; /* measurement noise covariance matrix ® */    CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):                                    P'(k)=A*P(k-1)*At + Q)*/    CvMat* gain;                /* Kalman gain matrix (K(k)):                                    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/    CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):                                    P(k)=(I-K(k)*H)*P'(k) */    CvMat* temp1;               /* temporary matrices */    CvMat* temp2;    CvMat* temp3;    CvMat* temp4;    CvMat* temp5;}CvKalman;The structure <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvKalman" target="_blank">CvKalman</a> is used to keep Kalman filter state. It is created by <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvCreateKalman" target="_blank">cvCreateKalman</a> function, updated by <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvKalmanPredict" target="_blank">cvKalmanPredict</a> and <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvKalmanCorrect" target="_blank">cvKalmanCorrect</a> functions and released by <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvReleaseKalman" target="_blank">cvReleaseKalman</a> functions. Normally, the structure is used for standard Kalman filter (notation and formulae are borrowed from excellent Kalman tutorial <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#kalman_paper" target="_blank">[Welch95]</a>):<br /><br />xk=A•xk-1+B•uk+wkzk=H•xk+vk,where:<br /><br />xk (xk-1) - state of the system at the moment k (k-1)zk - measurement of the system state at the moment kuk - external control applied at the moment kwk and vk are normally-distributed process and measurement noise, respectively:p(w) ~ N(0,Q)p(v) ~ N(0,R),that is,Q - process noise covariance matrix, constant or variable,R - measurement noise covariance matrix, constant or variableIn case of standard Kalman filter, all the matrices: A, B, H, Q and R are initialized once after <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvKalman" target="_blank">CvKalman</a> structure is allocated via <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvCreateKalman" target="_blank">cvCreateKalman</a>. However, the same structure and the same functions may be used to simulate extended Kalman filter by linearizing extended Kalman filter equation in the current system state neighborhood, in this case A, B, H (and, probably, Q and R) should be updated on every step. <br /><br /><b>[Welch95] Greg Welch, Gary Bishop. An Introduction To the Kalman Filter. Technical Report TR95-041, University of North Carolina at Chapel Hill, 1995. </b>Online version is available at [url="http://www.cs.unc.edu/~welch/kalman/kalman_filter/kalman.html"]http://www.cs.unc.edu/~welch/kalman/kalman_filter/kalman.html <br /><br /><br /><b>CreateKalman</b><br />Allocates Kalman filter structure<br /><br />CvKalman* cvCreateKalman( int dynamParams, int measureParams, int controParams=0 );<br /><br />dynamParams dimensionality of the state vector measureParams dimensionality of the measurement vector controlParams dimensionality of the control vector <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvCreateKalman" target="_blank">cvCreateKalman</a> allocates <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvKalman" target="_blank">CvKalman</a> and all its matrices and initializes them somehow. <br /><br /><br /><b>ReleaseKalman</b><br />Deallocates Kalman filter structure<br /><br />void cvReleaseKalman(CvKalman** kalman );<br /><br />kalman double pointer to the Kalman filter structure. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvReleaseKalman" target="_blank">cvReleaseKalman</a> releases the structure <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvKalman" target="_blank">CvKalman</a> and all underlying matrices. <br /><br /><br /><b>KalmanPredict</b><br />Estimates subsequent model state<br /><br />const CvMat* cvKalmanPredict( CvKalman* kalman, const CvMat* control=NULL );#define cvKalmanUpdateByTime cvKalmanPredict<br /><br />kalman Kalman filter state. control Control vector (uk), should be NULL iff there is no external control (<i>controlParams</i>=0). <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvKalmanPredict" target="_blank">cvKalmanPredict</a> estimates the subsequent stochastic model state by its current state and stores it at <i>kalman-&gt;state_pre</i>:<br /><br />    x'k=A•xk+B•uk    P'k=A•Pk-1*AT + Q,wherex'k is predicted state (kalman-&gt;state_pre),xk-1 is corrected state on the previous step (kalman-&gt;state_post)                (should be initialized somehow in the beginning, zero vector by default),uk is external control (<i>control</i> parameter),P'k is priori error covariance matrix (kalman-&gt;error_cov_pre)Pk-1 is posteriori error covariance matrix on the previous step (kalman-&gt;error_cov_post)                (should be initialized somehow in the beginning, identity matrix by default),The function returns the estimated state. <br /><br /><br /><b>KalmanCorrect</b><br />Adjusts model state<br /><br />void cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement=NULL );#define cvKalmanUpdateByMeasurement cvKalmanCorrect<br /><br />kalman Pointer to the structure to be updated. measurement Pointer to the structure CvMat containing the measurement vector. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvKalmanCorrect" target="_blank">cvKalmanCorrect</a> adjusts stochastic model state on the basis of the given measurement of the model state:<br /><br />Kk=P'k•HT•(H•P'k•HT+R)-1xk=x'k+Kk•(zk-H•x'k)Pk=(I-Kk•H)•P'kwherezk - given measurement (<i>mesurement</i> parameter)Kk - Kalman "gain" matrix.The function stores adjusted state at <i>kalman-&gt;state_post</i> and returns it on output. <br /><br /><br /><b>Example. Using Kalman filter to track a rotating point</b><br />#include "cv.h"#include "highgui.h"#include &lt;math.h&gt;int main(int argc, char** argv){    /* A matrix data */    const float A[] = { 1, 1, 0, 1 };    IplImage* img = cvCreateImage( cvSize(500,500), 8, 3 );    CvKalman* kalman = cvCreateKalman( 2, 1, 0 );    /* state is (phi, delta_phi) - angle and angle increment */    CvMat* state = cvCreateMat( 2, 1, CV_32FC1 );    CvMat* process_noise = cvCreateMat( 2, 1, CV_32FC1 );    /* only phi (angle) is measured */    CvMat* measurement = cvCreateMat( 1, 1, CV_32FC1 );    CvRandState rng;    int code = -1;    cvRandInit( &rng, 0, 1, -1, CV_RAND_UNI );    cvZero( measurement );    cvNamedWindow( "Kalman", 1 );    for(;;)    {        cvRandSetRange( &rng, 0, 0.1, 0 );        rng.disttype = CV_RAND_NORMAL;        cvRand( &rng, state );        memcpy( kalman-&gt;transition_matrix-&gt;data.fl, A, sizeof(A));        cvSetIdentity( kalman-&gt;measurement_matrix, cvRealScalar(1) );        cvSetIdentity( kalman-&gt;process_noise_cov, cvRealScalar(1e-5) );        cvSetIdentity( kalman-&gt;measurement_noise_cov, cvRealScalar(1e-1) );        cvSetIdentity( kalman-&gt;error_cov_post, cvRealScalar(1));        /* choose random initial state */        cvRand( &rng, kalman-&gt;state_post );        rng.disttype = CV_RAND_NORMAL;        for(;;)        {            #define calc_point(angle)                                      &#092;                cvPoint( cvRound(img-&gt;width/2 + img-&gt;width/3*cos(angle)),  &#092;                         cvRound(img-&gt;height/2 - img-&gt;width/3*sin(angle)))            float state_angle = state-&gt;data.fl[0];            CvPoint state_pt = calc_point(state_angle);            /* predict point position */            const CvMat* prediction = cvKalmanPredict( kalman, 0 );            float predict_angle = prediction-&gt;data.fl[0];            CvPoint predict_pt = calc_point(predict_angle);            float measurement_angle;            CvPoint measurement_pt;            cvRandSetRange( &rng, 0, sqrt(kalman-&gt;measurement_noise_cov-&gt;data.fl[0]), 0 );            cvRand( &rng, measurement );            /* generate measurement */            cvMatMulAdd( kalman-&gt;measurement_matrix, state, measurement, measurement );            measurement_angle = measurement-&gt;data.fl[0];            measurement_pt = calc_point(measurement_angle);            /* plot points */            #define draw_cross( center, color, d )                                 &#092;                cvLine( img, cvPoint( center.x - d, center.y - d ),                &#092;                             cvPoint( center.x + d, center.y + d ), color, 1, 0 ); &#092;                cvLine( img, cvPoint( center.x + d, center.y - d ),                &#092;                             cvPoint( center.x - d, center.y + d ), color, 1, 0 )            cvZero( img );            draw_cross( state_pt, CV_RGB(255,255,255), 3 );            draw_cross( measurement_pt, CV_RGB(255,0,0), 3 );            draw_cross( predict_pt, CV_RGB(0,255,0), 3 );            cvLine( img, state_pt, predict_pt, CV_RGB(255,255,0), 3, 0 );            /* adjust Kalman filter state */            cvKalmanCorrect( kalman, measurement );            cvRandSetRange( &rng, 0, sqrt(kalman-&gt;process_noise_cov-&gt;data.fl[0]), 0 );            cvRand( &rng, process_noise );            cvMatMulAdd( kalman-&gt;transition_matrix, state, process_noise, state );            cvShowImage( "Kalman", img );            code = cvWaitKey( 100 );            if( code &gt; 0 ) /* break current simulation by pressing a key */                break;        }        if( code == 27 ) /* exit by ESCAPE */            break;    }    return 0;}<br /><b>CvConDensation</b><br />ConDenstation state<br /><br />    typedef struct CvConDensation    {        int MP;     //Dimension of measurement vector        int DP;     // Dimension of state vector        float* DynamMatr;       // Matrix of the linear Dynamics system        float* State;           // Vector of State        int SamplesNum;         // Number of the Samples        float** flSamples;      // array of the Sample Vectors        float** flNewSamples;   // temporary array of the Sample Vectors        float* flConfidence;    // Confidence for each Sample        float* flCumulative;    // Cumulative confidence        float* Temp;            // Temporary vector        float* RandomSample;    // RandomVector to update sample set        CvRandState* RandS;     // Array of structures to generate random vectors    } CvConDensation;The structure <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvConDensation" target="_blank">CvConDensation</a> stores CONditional DENSity propagATION tracker state. The information about the algorithm can be found at <a href="http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/ISARD1/condensation.html" target="_blank">http://www.dai.ed.ac.uk/CVonline/LOCAL_COP...ndensation.html</a> <br /><br /><br /><b>CreateConDensation</b><br />Allocates ConDensation filter structure<br /><br />CvConDensation* cvCreateConDensation( int DynamParams, int MeasureParams, int SamplesNum );<br /><br />DynamParams Dimension of the state vector. MeasureParams Dimension of the measurement vector. SamplesNum Number of samples. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvCreateConDensation" target="_blank">cvCreateConDensation</a> creates <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvConDensation" target="_blank">CvConDensation</a> structure and returns pointer to the structure. <br /><br /><br /><b>ReleaseConDensation</b><br />Deallocates ConDensation filter structure<br /><br />void cvReleaseConDensation( CvConDensation** ConDens );<br /><br />ConDens Pointer to the pointer to the structure to be released. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvReleaseConDensation" target="_blank">cvReleaseConDensation</a> releases the structure <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvConDensation" target="_blank">CvConDensation</a> (see <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvConDensation" target="_blank">cvConDensation</a>) and frees all memory previously allocated for the structure. <br /><br /><br /><b>ConDensInitSampleSet</b><br />Initializes sample set for condensation algorithm<br /><br />void cvConDensInitSampleSet( CvConDensation* ConDens, CvMat* lowerBound, CvMat* upperBound );<br /><br />ConDens Pointer to a structure to be initialized. lowerBound Vector of the lower boundary for each dimension. upperBound Vector of the upper boundary for each dimension. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvConDensInitSampleSet" target="_blank">cvConDensInitSampleSet</a> fills the samples arrays in the structure <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_CvConDensation" target="_blank">CvConDensation</a> with values within specified ranges. <br /><br /><br /><b>ConDensUpdateByTime</b><br />Estimates subsequent model state<br /><br />void cvConDensUpdateByTime( CvConDensation* ConDens );<br /><br />ConDens Pointer to the structure to be updated. <br /><br />The function <a href="http://www.itl.k.u-tokyo.ac.jp/~nakamura/opencv/opencvref_motionanalysis.html#decl_cvConDensUpdateByTime" target="_blank">cvConDensUpdateByTime</a> estimates the subsequent stochastic model state from its current state. <br /><br /><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />今天看了一下opencv的这一节。然后发现中文网站已经有相关条目了。]]></description>
		<pubDate>Thu, 01 Jan 2009 16:00:43 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54991</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54991</feedburner:origLink></item>
	<item>
		<title>Learning OpenCV：exercise4-2</title>
		<link>http://feedproxy.google.com/~r/ari/~3/3iDZIfR6gVU/showentry=54934</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[始终不能在窗口上显示该像素的颜色值，<br />无奈的很。<br /><!--c1--><div class='codetop'>代码</div><div class='codemain'><!--ec1-->#include &#34;cv.h&#34;<br />#include &#34;highgui.h&#34;<br />#include &#34;stdio.h&#34;<br /><br />// Define our callback which we will install for<br />// mouse events.<br />//<br />void my_mouse_callback&#40;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int event, int x, int y, int flags, void* param <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#41;;<br />bool showingRGB=false;<br />CvPoint pt;<br />char* mytext;<br /><br />void showRGB&#40;IplImage* img, CvPoint pt&#41;;<br /><br /> <br /><br />int main&#40; int argc, char** argv &#41; {<br /> <br /><br /> IplImage *frame=NULL;<br /> cvNamedWindow&#40;&#34;Video&#34;,1&#41;;<br />// cvNamedWindow&#40;&#34;Video1&#34;,1&#41;;<br /><br /> frame=cvLoadImage&#40;&#34;D&#58;&#092;&#092;Program Files&#092;&#092;OpenCV&#092;&#092;_make&#092;&#092;test&#092;&#092;Debug&#092;&#092;a.jpg&#34;&#41;;<br /><br /> IplImage* temp = NULL;//cvCloneImage&#40; frame&#41;; <br /><br /> cvSetMouseCallback&#40; <br />&nbsp;&nbsp;&#34;Video&#34;, <br />&nbsp;&nbsp;my_mouse_callback, <br />&nbsp;&nbsp;&#40;void*&#41; frame <br />&nbsp;&nbsp;&#41;;<br /><br /><br /> while&#40; 1 &#41; {<br />//&nbsp;&nbsp;cvCopyImage&#40; frame, temp &#41;;<br />&nbsp;&nbsp;if&#40;showingRGB&#41; showRGB&#40;frame,pt&#41;;<br />&nbsp;&nbsp;cvShowImage&#40; &#34;Video&#34;, frame &#41;;<br />// cvShowImage&#40; &#34;Video1&#34;, frame &#41;;<br />&nbsp;&nbsp;if&#40; cvWaitKey&#40; 15 &#41;==27 &#41; break;<br /> }<br /> <br /><br /> <br /> cvReleaseImage&#40;&frame&#41;;<br /> cvReleaseImage&#40;&temp&#41;;<br /><br /> cvDestroyAllWindows&#40;&#41;;<br /> return 0;<br />}<br /><br />void my_mouse_callback&#40;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int event, int x, int y, int flags, void* param &#41;<br />{ <br /> IplImage* img = &#40;IplImage*&#41; param;<br /><br /> switch&#40; event &#41; {<br /> case CV_EVENT_LBUTTONDOWN&#58; {<br />&nbsp;&nbsp; showingRGB=false;<br />&nbsp;&nbsp;pt=cvPoint&#40;x,y&#41;;<br /> // pt.x=x;<br /> // pt.y=y; <br />&nbsp;&nbsp;showingRGB=true;<br />&nbsp;&nbsp;cvWaitKey&#40;50&#41;;<br /> <br /> break; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> case CV_EVENT_LBUTTONUP&#58;{<br />&nbsp;&nbsp;showingRGB=false;<br />&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /> case CV_EVENT_MOUSEMOVE&#58; {<br />&nbsp;&nbsp;showingRGB = false;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;break; <br /> }<br /><br />}<br />void showRGB&#40;IplImage* img, CvPoint pt&#41;<br />{ <br /><br /> //用来显示文字,初始化字体 <br /> CvFont font=cvFont&#40;1&#41;; <br />// cvInitFont&#40; &font, CV_FONT_HERSHEY_COMPLEX,1, 1&#41;;<br /> <br /><br />&nbsp;&nbsp;CvScalar s;<br />&nbsp;&nbsp;s=cvGet2D&#40;img,pt.x,pt.y&#41;; // get the &#40;x,y&#41; pixel value<br />printf&#40;&#34;%d &#34;,int&#40;s.val&#91;0&#93;&#41;&#41;;<br />// unsigned char R = CV_IMAGE_ELEM&#40;img, unsigned char, pt.x, pt.y*3 + 2&#41;;<br />//itoa&#40;int&#40;s.val&#91;0&#93;&#41;,mytext,10&#41;;<br />//cvPutText&#40;img,mytext,cvPoint&#40;pt.x,pt.y&#41;,&font,cvScalar&#40;0&#41;&#41;; <br />&nbsp;&nbsp;itoa&#40;pt.x,mytext,10&#41;;<br />cvPutText&#40;img,mytext,pt,&font,cvScalar&#40;0&#41;&#41;;<br />itoa&#40;pt.y,mytext,10&#41;;<br /> cvPutText&#40;img,mytext,cvPoint&#40;pt.x+30,pt.y&#41;,&font,cvScalar&#40;0&#41;&#41;;<br />}<!--c2--></div><!--ec2--><br /><br />]]></description>
		<pubDate>Sun, 21 Dec 2008 16:47:13 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54934</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54934</feedburner:origLink></item>
	<item>
		<title>Learning OpenCV：exercise4-1c</title>
		<link>http://feedproxy.google.com/~r/ari/~3/YyRK_eYvj8w/showentry=54565</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[<!--c1--><div class='codetop'>代码</div><div class='codemain'><!--ec1--> #include &#34;cv.h&#34;<br />#include &#34;highgui.h&#34;<br />#include &#34;stdio.h&#34;<br /><br /><br />int main&#40; int argc, char** argv &#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!argv&#91;1&#93;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&#40;&#34;Need a file!&#092;n&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage *frame,*gray,*edge,*all; //To hold movie images<br />&nbsp;&nbsp;&nbsp;&nbsp;CvCapture* capture&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!&#40;capture=cvCreateFileCapture&#40;argv&#91;1&#93;&#41;&#41;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;{printf&#40;&#34;Failed to open %s&#092;n&#34;,argv&#91;1&#93;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Video&#34;,1&#41;;<br />// &nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Gray&#34;,1&#41;;<br />// &nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Edge&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;All&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;int frame_width=int&#40;cvGetCaptureProperty&#40;capture,CV_CAP_PROP_FRAME_WIDTH&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;int frame_height=int&#40;cvGetCaptureProperty&#40;capture,CV_CAP_PROP_FRAME_HEIGHT&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;CvSize frame_size=cvSize&#40;frame_width,frame_height&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;gray = cvCreateImage&#40;frame_size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge = cvCreateImage&#40;frame_size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;all = cvCreateImage&#40;cvSize&#40;3*frame_width,frame_height&#41;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;//用来显示文字,初始化字体 <br />&nbsp;&nbsp;&nbsp;&nbsp;CvFont font; <br />cvInitFont&#40; &font, CV_FONT_HERSHEY_SCRIPT_SIMPLEX,1, 1&#41;; &nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while &#40;frame&#41;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame=cvQueryFrame&#40;capture&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Video&#34;,frame&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCvtColor &#40;frame,gray,CV_BGR2GRAY&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Gray&#34;,gray&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCanny&#40;gray,edge,50, 150, 3&#41;;//后面三个参数随意填的<br />// &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Edge&#34;,edge&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;0,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageCOI&#40;frame,1&#41;;//因为灰度和边缘检测图都是单通道的，所以只取了frame的一个通道来复制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;frame,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageCOI&#40;frame,0&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;frame_width,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvPutText&#40;gray,&#34;Gray&#34;,cvPoint&#40;25,25&#41;,&font,cvScalar&#40;55,55,55&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;gray,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;2*frame_width,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvPutText&#40;edge,&#34;Edge&#34;,cvPoint&#40;25,25&#41;,&font,cvScalar&#40;155,155,155&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;edge,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvPutText&#40;all,&#34;Frame&#34;,cvPoint&#40;25,25&#41;,&font,cvScalar&#40;55,55,55&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;All&#34;,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&#40; cvWaitKey&#40; 15 &#41;==27 &#41; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&frame&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&gray&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&edge&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />}<!--c2--></div><!--ec2-->]]></description>
		<pubDate>Sat, 20 Dec 2008 22:32:44 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54565</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54565</feedburner:origLink></item>
	<item>
		<title>Learning OpenCV：exercise4-1b</title>
		<link>http://feedproxy.google.com/~r/ari/~3/T17p_S0qasM/showentry=54562</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[<!--c1--><div class='codetop'>代码</div><div class='codemain'><!--ec1-->#include &#34;cv.h&#34;<br />#include &#34;highgui.h&#34;<br />#include &#34;stdio.h&#34;<br /><br /><br />int main&#40; int argc, char** argv &#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!argv&#91;1&#93;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&#40;&#34;Need a file!&#092;n&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage *frame,*gray,*edge,*all; //To hold movie images<br />&nbsp;&nbsp;&nbsp;&nbsp;CvCapture* capture&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!&#40;capture=cvCreateFileCapture&#40;argv&#91;1&#93;&#41;&#41;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;{printf&#40;&#34;Failed to open %s&#092;n&#34;,argv&#91;1&#93;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Video&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Gray&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;Edge&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvNamedWindow&#40;&#34;All&#34;,1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;int frame_width=int&#40;cvGetCaptureProperty&#40;capture,CV_CAP_PROP_FRAME_WIDTH&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;int frame_height=int&#40;cvGetCaptureProperty&#40;capture,CV_CAP_PROP_FRAME_HEIGHT&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;CvSize frame_size=cvSize&#40;frame_width,frame_height&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;gray = cvCreateImage&#40;frame_size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge = cvCreateImage&#40;frame_size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;all = cvCreateImage&#40;cvSize&#40;3*frame_width,frame_height&#41;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPL_DEPTH_8U,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&#41;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while &#40;frame&#41;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame=cvQueryFrame&#40;capture&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Video&#34;,frame&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCvtColor &#40;frame,gray,CV_BGR2GRAY&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Gray&#34;,gray&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCanny&#40;gray,edge,50, 150, 3&#41;;//后面三个参数随意填的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;Edge&#34;,edge&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;0,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageCOI&#40;frame,1&#41;;//因为灰度和边缘检测图都是单通道的，所以只取了frame的一个通道来复制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;frame,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageCOI&#40;frame,0&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;frame_width,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;gray,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSetImageROI&#40;all,cvRect&#40;2*frame_width,0,frame_width,frame_height&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCopy&#40;edge,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResetImageROI&#40;all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvShowImage&#40;&#34;All&#34;,all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&#40; cvWaitKey&#40; 15 &#41;==27 &#41; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&frame&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&gray&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&edge&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvReleaseImage&#40;&all&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />}<!--c2--></div><!--ec2-->]]></description>
		<pubDate>Sat, 20 Dec 2008 22:04:54 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54562</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54562</feedburner:origLink></item>
	<item>
		<title>Learning OpenCV：exercise4-1a</title>
		<link>http://feedproxy.google.com/~r/ari/~3/WIhX7CNIGwE/showentry=54549</link>
		<category>因为专业，所以成功</category>
		<description><![CDATA[#include "cv.h"<br />#include "highgui.h"<br />#include "stdio.h"<br /><br /><br />int main( int argc, char** argv ) {<br />	if (!argv[1])<br />	{<br />		printf("Need a file!&#092;n");<br />		return -1;<br />	}<br />	IplImage *frame,*gray,*edge; //To hold movie images<br />	CvCapture* capture         = NULL;<br />	if (!(capture=cvCreateFileCapture(argv[1])))<br />	{printf("Failed to open %s&#092;n",argv[1]);<br />	return -1;<br />	}<br />	<br />	cvNamedWindow("Video",1);<br />	cvNamedWindow("Gray",1);<br />	cvNamedWindow("Edge",1);<br />	<br />	CvSize frame_size=cvSize(int(cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH) ),<br />		int(cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)));<br />	edge = cvCreateImage(frame_size,<br />		IPL_DEPTH_8U,<br />		1);<br />	gray = cvCreateImage(frame_size,<br />		IPL_DEPTH_8U,<br />		1);<br />	<br />	while (frame){<br />		<br />		frame=cvQueryFrame(capture);<br />		cvShowImage("Video",frame);<br />		cvCvtColor (frame,gray,CV_BGR2GRAY);<br />		cvShowImage("Gray",gray);<br />		cvCanny(gray,edge,50, 150, 3);//后面三个参数随意填的<br />		cvShowImage("Edge",edge);<br />		if( cvWaitKey( 15 )==27 ) break;<br />		<br />	}<br />	<br />	cvReleaseImage(&frame);<br />	cvReleaseImage(&gray);<br />	cvReleaseImage(&edge);<br />	return 0;<br />}]]></description>
		<pubDate>Sat, 20 Dec 2008 20:49:36 +0800</pubDate>
		<guid isPermaLink="false">http://blog.verycd.com/ari/showentry=54549</guid>
	<feedburner:origLink>http://blog.verycd.com/ari/showentry=54549</feedburner:origLink></item>
</channel>
</rss>
