﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我的编程乐园-文章分类-OpenCV / OpenGL</title><link>http://www.cppblog.com/deercoder/category/11924.html</link><description>身是菩提树，
      心如明镜台；
               时时勤拂拭，
                     莫使惹尘埃</description><language>zh-cn</language><lastBuildDate>Sun, 18 Apr 2010 05:05:34 GMT</lastBuildDate><pubDate>Sun, 18 Apr 2010 05:05:34 GMT</pubDate><ttl>60</ttl><item><title>一句代码引发的巨大的BUG</title><link>http://www.cppblog.com/deercoder/articles/104145.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 26 Dec 2009 11:17:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/104145.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/104145.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/104145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/104145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/104145.html</trackback:ping><description><![CDATA[在调试OpenCV的过程中，由于原来的文件太大，所以需要选择一个方法来缩小，用到了resize函数，可是最终的结果却是，仅仅多加了一个if判断，就出现了问题，显示<br>PyrDown函数的参数个数不对，这样的话，程序都无法正确运行。<br>可是仅仅改了一句代码啊，为什么出现了这样一个问题呢？<br>看看下面改变的部分代码：<br>static void make_pic(CString infilename,CString outfilename)<br>{<br>&nbsp;IplImage *image = cvLoadImage(infilename,3);<br>&nbsp;if ((image-&gt;height &gt; 1000) &amp;&amp; (image-&gt;width &gt; 2000))&nbsp;<br>&nbsp;{<br>&nbsp;&nbsp;IplImage *newimgtmp = cvCreateImage(cvSize(image-&gt;width/2,image-&gt;height/2),image-&gt;depth,image-&gt;nChannels);<br>&nbsp;&nbsp;cvResize(image,newimgtmp,CV_INTER_LINEAR);<br>&nbsp;&nbsp;<span style="COLOR: red">// image = newimgtmp;</span><br>&nbsp;&nbsp;cvReleaseImage(&amp;newimgtmp);<br>&nbsp;}<br>&nbsp;if (image == NULL)<br>&nbsp;{<br>&nbsp;&nbsp;MessageBox(NULL,"读取图片失败","失败",MB_OK);<br>&nbsp;&nbsp;readpicSucess = false;<br>&nbsp;&nbsp;return ;<br>&nbsp;}<br>&nbsp;const char *cascade_name = "data/haarcascades/haarcascade_frontalface_alt2.xml";<br>&nbsp;CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name);<br>&nbsp;if (cascade == NULL)<br>&nbsp;{<br>&nbsp;&nbsp;::MessageBox(NULL,"没有data文件夹，读取分离器失败","失败",MB_OK);<br>&nbsp;&nbsp;readSucess = false;<br>&nbsp;&nbsp;return ;<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;detect_and_draw_objects(image,cascade,1,infilename,outfilename);<br>&nbsp;&nbsp;cvReleaseHaarClassifierCascade(&amp;cascade);<br>&nbsp;&nbsp;cvReleaseImage(&amp;image);<br>&nbsp;}<br>}<br><br>在图示的红色部分，增加了一个赋值语句，就是说赋值的话将这个尺寸给img，可是实际上，根本没有必要，因为resize本来已经做好了这个工作，而通过查书，终于发现了，然后注释掉该句，OK，完全没有任何问题！<br><br>体会是：<br>首先要确定代码的范围，因为只改正了那一部分，而且注释后没有问题，所以就是这个部分的问题，然后逐句的来找错误。需要注意的是是否合法，就像这个赋值，就是可行而不合法的操作，根本没有见过两个直接的这个赋值，iplimag的类型可以直接赋值吗？显然没有，所以就可以得到这个结论。<br>调试，是程序的必须，而面对困难的时候，多走一步，未来就会少走一步！
<img src ="http://www.cppblog.com/deercoder/aggbug/104145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-26 19:17 <a href="http://www.cppblog.com/deercoder/articles/104145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC与OpenCV人脸识别程序。</title><link>http://www.cppblog.com/deercoder/articles/103542.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 19 Dec 2009 12:49:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/103542.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/103542.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/103542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/103542.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/103542.html</trackback:ping><description><![CDATA[碰到的问题和解决：<br>1。在将图像转化成灰度的时候发生了错误，用的是cvCvtColor函数，但是出现了错误。<br>试过了几遍都没有效果，不过后来发现可能是通道的原因，改正之后，又与前面的有冲突，这个时候突然向导要先做一个判断截取图像大小的功能。所以刚好建立一个新的灰度图像，通道设置为1，然后实现了将这个赋值过去的，得到大小合适，而且是灰度的图像。<br><br>2.出现了不合适的type，原因是采用的参数不对，或者是前后的内容不一致。比如说在进行直方图采样的时候，参数传递是有讲究的，如果不慎，容易出现错误。<br><br>3.MFC中出现错误。this指针只能用在当前类中，而在static函数中，如果出现就会报错，很明显的错误，java老师也讲过，static是类变量，而this是针对于一个实例的。<br><br>4.结构体内容，特别是IplImage结构体有很大的作用，其中，height和width都一个重要的作用，还有，你要重新定义一个大小的话，用cvResize函数来实现，因为这个函数可以实现将目标图像结构的指针转化成你要得到的图像。此时就可以将其转化成灰度图像。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((height</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">(width</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_34_329_Open_Image onclick="this.style.display='none'; Codehighlighter1_34_329_Open_Text.style.display='none'; Codehighlighter1_34_329_Closed_Image.style.display='inline'; Codehighlighter1_34_329_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_34_329_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_34_329_Closed_Text.style.display='none'; Codehighlighter1_34_329_Open_Image.style.display='inline'; Codehighlighter1_34_329_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_34_329_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_34_329_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IplImage&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;cvCreateImage(cvSize(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">),IPL_DEPTH_8U,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvResize(newImg,&nbsp;tmp,&nbsp;CV_INTER_LINEAR);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">缩放源图像到目标图像</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IplImage&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">greyImage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cvCreateImage(cvSize(tmp</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">width,tmp</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">height),IPL_DEPTH_8U,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCvtColor(tmp,greyImage,CV_BGR2GRAY);<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSaveImage(outfilename,greyImage);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_340_521_Open_Image onclick="this.style.display='none'; Codehighlighter1_340_521_Open_Text.style.display='none'; Codehighlighter1_340_521_Closed_Image.style.display='inline'; Codehighlighter1_340_521_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_340_521_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_340_521_Closed_Text.style.display='none'; Codehighlighter1_340_521_Open_Image.style.display='inline'; Codehighlighter1_340_521_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_340_521_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_340_521_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IplImage&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">greyImage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cvCreateImage(cvSize(newImg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">width,newImg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">height),IPL_DEPTH_8U,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvCvtColor(newImg,greyImage,CV_BGR2GRAY);<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cvSaveImage(outfilename,greyImage);<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
5.具体的参数，特别是那些定义的宏，是有特殊意义的。 <br>
<div align=center src_cetemp="http://www.cppblog.com/images/cppblog_com/deercoder/outlook.jpg"><img src="http://www.cppblog.com/images/cppblog_com/deercoder/outlook.jpg" border=0></div>
<br><br>一个样例，本来生成的灰度图片应该是bmp格式，无奈不支持，所以截图来处理。<br>
<div align=center src_cetemp="http://www.cppblog.com/images/cppblog_com/deercoder/1213213.jpg"><img src="http://www.cppblog.com/images/cppblog_com/deercoder/1213213.jpg" border=0></div>
<img src ="http://www.cppblog.com/deercoder/aggbug/103542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-19 20:49 <a href="http://www.cppblog.com/deercoder/articles/103542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenCV制作静态链接库</title><link>http://www.cppblog.com/deercoder/articles/103107.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sun, 13 Dec 2009 06:52:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/103107.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/103107.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/103107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/103107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/103107.html</trackback:ping><description><![CDATA[&nbsp;当程序需要脱离opencv的安装环境是，静态库的创建就显得重要了。首先笔者的opencv1.0安装路径在C:\Program Files\OpenCV，并且对opencv进行了配置。下面就进入正题吧。
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <strong>一. 找到opencv源码的一处错误</strong>：通过搜索关键字foreground_regions，发现在cvaux.h文件中，第1137行注释没有闭合，且有不明原因的乱码，导致下一行定义的foreground_regions成为注释的一部分，源文件原始代码如下：<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CvMemStorage*&nbsp;<wbr>&nbsp;<wbr> storage;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br><font color=#ff0000><strong><em>改为如下形式</em></strong>：</font><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CvMemStorage*&nbsp;<wbr>&nbsp;<wbr> storage;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> \<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> CvSeq*&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> foreground_regions</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <strong>二. 在编译过程中可能会碰到&#8220;streams.h 没有发现&#8221;这样的错误，这种问题是需要 DirectShow SDK 。具体的解决方法如下：</strong></p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<ol>
    <li>从 msdn.microsoft.com/directx/ 下载 DirectX，(文件很大，但是可以只下载部分）。如果不能正常工作，考虑一下 HighGUI 利用 VFW 或 MIL 来扑捉视频序列。
    <li>带样例安装 （TOGETHER WITH SAMPLES.）
    <li>打开项目 &lt;DirectXSDKInstallFolder&gt;\samples\C++\DirectShow\BaseClasses\baseclasses.{dsw|sln}. 如果没有这个文件，要么是你没有下载样例，要么是路径不对。
    <li>编译建立 Release 和 Debug 版本
    <li>将产生的库 (在 DirectX 9.x 中，分别叫 strmbase.lib 和 strmbasd.lib) 拷贝到目录 &lt;DirectXSDKInstallFolder&gt;\lib 下。
    <li>在 Developer Studio 添加路径：
    <p>&lt;DirectXSDKInstallFolder&gt;\include<br>&lt;DirectXSDKInstallFolder&gt;\samples\C++\DirectShow\BaseClasses<br></p>
    <p>到 includes' 搜索路径中 (在 Tools-&gt;Options-&gt;Directories-&gt;Include files in case of Developer Studio 6.0)</p>
    <p>添加 &lt;DirectXSDKInstallFolder&gt;\lib 到库搜索路径中 (在 Tools-&gt;Options-&gt;Directories-&gt;Library files in case of Developer Studio 6.0)</p>
    <p><font color=#ff0000><strong>注意</strong><strong>: 将上面增加的东东添加到最顶端，否则还会出现编译或链接错误。因为 Developer Studio 6.0 包含了一些老版本的 DirectX 头文件和库文件，它们与新版本有冲突。</strong></font></p>
    </li>
</ol>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <strong>三. 进行静态库制作 </p>
</strong>
<p>&#160;</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1. 在C:\Program Files\OpenCV\_make中建立一个静态库工程（<strong>现在以highguil.lib为例</strong>，因为这个静态库容易出现问题）</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 2. 把C:\Program Files\OpenCV\otherlibs\highgui中的文件复制到创建的highguil文件下。<strong><font color=#ff0000>在highuil工程中添加如下文件，这里有个关键的地方。不要把highguil下的所有文件都添加到工程中（这点很重要），里面的一些文件在编译中会因为找不到头文件而失败。如cvcap_xine.cpp就会缺少xine.h而报错等。经过笔者的反复测试，得到如下几个需要添加到工程的文件：</font></strong></p>
<img src="http://www.cppblog.com/images/cppblog_com/deercoder/2.jpg" border=0><img src="http://www.cppblog.com/images/cppblog_com/deercoder/1.jpg" border=0><br>&nbsp;3. 添加完工程文件后就得进行设置了（这里调到release版本，debug版本类似）
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> （1）设置-&gt;c/c++-&gt;Code Generation 中的Use run-time library中 选择Multithreaded DLL;</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>（2）设置-&gt;c/c++-&gt;预处理器中的预处理器定义中添加：,CVAPI_EXPORTS&nbsp;<wbr>附加包含路径中加：<br>..\..\otherlibs\highgui</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>（3）设置-&gt;c/c++-&gt;Library中输出文件名添加：..\..\lib\highguiL.lib</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4. 进行编译，这样highguil.lib就做成了。同样的道理可以做成cvl.lib, cvcaml.lib,cvauxl.lib, cvcorel.lib 这样对于的静态链接库就完成了！</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <strong>四. 独立程序的运行。对独立程序设置下环境如下：</strong></p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 1.&nbsp;<wbr>设置-&gt;常规-&gt;Microsoft基础类(M)：使用MFC作为静态链接库<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>2. 设置-&gt;c/c++-&gt;Code Generation 中的Use run-time library中 选择Multithreaded DLL<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 3. 设置-&gt;c/c++-&gt;预处理器中的预处理器定义中添加：,CVAPI_EXPORTS附加包含路径中加：<br>C:\Program Files\OpenCV\cxcore\include,C:\Program Files\OpenCV\cvaux\include,C:\Program Files\OpenCV\cv\include,C:\Program Files\OpenCV\otherlibs\highgui<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4. 设置-&gt;连接中的对象/库模块加入：<br><font color=#ff0000>kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib cxcorel.lib cvl.lib highguil.lib cvcamL.lib</font></p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 5. 编译运行。这样你的程序就可以脱离OPENCV环境而独立运行了。</p>
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://blog.sina.com.cn/s/blog_52996aea0100amtj.html">http://blog.sina.com.cn/s/blog_52996aea0100amtj.html</a><br>
<img src ="http://www.cppblog.com/deercoder/aggbug/103107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-13 14:52 <a href="http://www.cppblog.com/deercoder/articles/103107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC使用OPenCV常用函数搜集(转)</title><link>http://www.cppblog.com/deercoder/articles/103076.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 12 Dec 2009 15:31:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/103076.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/103076.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/103076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/103076.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/103076.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif"><br>MFC使用OPenCV常用函数搜集
<p>================================1 显示IplImage到指定窗口==================================<br>public:<br>BITMAPINFO *m_pBITMAPINFO_24;// 24位真彩图BITMAPINFO格式固定，提前创建1次并保存指针<br>BITMAPINFO *m_pBITMAPINFO_08;// 8位灰度图BITMAPINFO格式固定，提前创建1次并保存指针<br>void DrawImgToWnd(CWnd *pWnd, IplImage *pImg)<br>{<br>RECT rc;<br>pWnd-&gt;GetClientRect(&amp;rc);<br>CDC *pDC = pWnd-&gt;GetDC();<br>HDC hdc = pDC-&gt;GetSafeHdc();<br>if(pImg-&gt;nChannels == 3) // 3通道<br>{<br>&nbsp;&nbsp; m_pBITMAPINFO_24-&gt;bmiHeader.biWidth = rc.right;<br>&nbsp;&nbsp; m_pBITMAPINFO_24-&gt;bmiHeader.biHeight = rc.bottom;//这里负值表示显示镜像位图<br>&nbsp;&nbsp; ::StretchDIBits(<br>&nbsp;&nbsp;&nbsp; hdc,<br>&nbsp;&nbsp;&nbsp; 0, 0, rc.right, rc.bottom, <br>&nbsp;&nbsp;&nbsp; 0, 0, pImg-&gt;width, pImg-&gt;height,&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; pImg-&gt;imageData, m_pBITMAPINFO_24, DIB_RGB_COLORS, SRCCOPY);<br>}<br>else // 单通道<br>{<br>&nbsp;&nbsp; m_pBITMAPINFO_24-&gt;bmiHeader.biWidth = rc.right;<br>&nbsp;&nbsp; m_pBITMAPINFO_24-&gt;bmiHeader.biHeight = rc.bottom;//这里负值表示显示镜像位图<br>&nbsp;&nbsp; ::StretchDIBits(<br>&nbsp;&nbsp;&nbsp; hdc,<br>&nbsp;&nbsp;&nbsp; 0, 0, rc.right, rc.bottom, <br>&nbsp;&nbsp;&nbsp; 0, 0, pImg-&gt;width, pImg-&gt;height,<br>&nbsp;&nbsp;&nbsp; pImg-&gt;imageData, m_pBITMAPINFO_08, DIB_RGB_COLORS, SRCCOPY);<br>}<br>pWnd-&gt;ReleaseDC(pDC);<br>}</p>
<p>&#160;</p>
<p>==================================2 位图缩放==================================<br>上面的函数DrawImgToWnd只能原比例显示位图，但实际中通常是要缩放后显示的</p>
<p>GDI自带的插值算法很慢<br>::SetStretchBltMode(hdc, HALFTONE);//名声很不好的一个函数</p>
<p>GDI+自带的插值算法很快，但GDI+封装的太厉害，没有导出任何接口，使用不方便，效率因此而下降，也可能我没找到..</p>
<p>OpenCV的插值算法也非常快，并且给出单独的函数(源码都有)，使用方便，如果合理使用，比GDI+稍快</p>
<p>当然你也可以自己写插值算法...........</p>
<p>下面是OpenCV缩放位图的函数:<br>IplImage *pImg_24 = cvCreateImage(cvSize(WND_WIDTH, WND_HEIGHT),8, 3);//创建与窗口同大小的空图<br>cvResize(pImg, pImg_24, CV_INTER_LINEAR);//把源图缩放至窗口大小<br>DrawImgToWnd(CWnd *pWnd, pImg_24);//上面写的函数，显示与窗口同尺寸的位图<br>cvReleaseImage(&amp;pImg);//释放内存<br>如果，pImg_24我们事先定义成公共变量并初始化，将省去每次缩放重复创建释放内存的操作，这样做就可以比GDI+快了</p>
<p>================================== 3 图片读取与转换 ==================================<br>// cvLoadImage第二个参数 -1:读取图像的原通道数 0:强制灰度图 1: 读取彩色图 <br>IplImage *pImgSrc = cvLoadImage("清晰面包.bmp",-1); <br>cvSaveImage("c:\\demo.bmp", pImgSrc);<br>cvSaveImage("c:\\demo.png", pImgSrc);<br>cvSaveImage("c:\\demo.jpg", pImgSrc);<br>cvSaveImage("c:\\demo.tiff", pImgSrc);<br>cvReleaseImage(&amp;pImgSrc);<br>OpenCV貌似不支持gif文件</p>
<p>================================== 4 截取指定部分图像 ==================================<br>IplImage* cvGetSubImage(IplImage *pImgSrc, CvRect rc)<br>{<br>&nbsp;&nbsp;&nbsp; cvSetImageROI(pImgSrc,rc); // 选中指定部分<br>&nbsp;&nbsp;&nbsp; IplImage *pImgDst = cvCreateImage(cvSize(rc.width, rc.height), pImgSrc-&gt;depth, pImgSrc-&gt;nChannels);<br>&nbsp;&nbsp;&nbsp; cvCopy(pImgSrc, pImgDst); // copy源图选中部分至新图<br>&nbsp;&nbsp;&nbsp; cvResetImageROI(pImgSrc); // 源图取消选中<br>&nbsp;&nbsp;&nbsp; return pImgDst;<br>}</p>
<p>================================== 5 几个常用的小函数 ==================================</p>
<p>cvSet(pImg,cvScalarAll(255));//把灰度图置成全白<br>cvSet(pImg,cvScalarAll(0));//把灰度图置成全黑<br>cvCvtColor(pImgSrc, pImgDst, CV_BGR2GRAY);//灰度化<br>cvThreshold(pImgSrc,pImgDst,141,255,CV_THRESH_BINARY); //灰度图的二值化，141为阀值</p>
</span>
<img src ="http://www.cppblog.com/deercoder/aggbug/103076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-12 23:31 <a href="http://www.cppblog.com/deercoder/articles/103076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KOCH曲线------分形算法使用</title><link>http://www.cppblog.com/deercoder/articles/101583.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 21 Nov 2009 15:05:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/101583.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/101583.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/101583.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/101583.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/101583.html</trackback:ping><description><![CDATA[<p>前段时间图形学实验绘制KOCH曲线，做了个小程序，初始化生成元为直线和正三角形的。<br>本来想写写体会的，毕竟是用C++/OpenGL来做的，可是一直没时间，下面就讲讲。。。<br>有朋友需要源代码的，我放在附件中，希望对你们有帮助，当然，我的希望是，如果你只是为了应付老师的话，大可不必，我吃过亏，所以也希望各位不要重蹈覆辙，如果纯粹为了学习，当然，我很高兴自己能够为你带来帮助。<br>下载地址：<a href="http://www.cppblog.com/Files/deercoder/OpenGL3.rar">http://www.cppblog.com/Files/deercoder/OpenGL3.rar</a><a href="http://www.cppblog.com/Files/deercoder/KOCH.rar"></a><br>《由于时间原因，以后整理出来，待续》</p>
<img src ="http://www.cppblog.com/deercoder/aggbug/101583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-21 23:05 <a href="http://www.cppblog.com/deercoder/articles/101583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL第一个小程序！！</title><link>http://www.cppblog.com/deercoder/articles/97413.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sun, 27 Sep 2009 15:56:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/97413.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/97413.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/97413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/97413.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/97413.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">GL</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">glut.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">math.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;GLfloat&nbsp;R&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;GLfloat&nbsp;Pi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3.1415926536f</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;myDisplay(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_138_315_Open_Image onclick="this.style.display='none'; Codehighlighter1_138_315_Open_Text.style.display='none'; Codehighlighter1_138_315_Closed_Image.style.display='inline'; Codehighlighter1_138_315_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_138_315_Closed_Image onclick="this.style.display='none'; Codehighlighter1_138_315_Closed_Text.style.display='none'; Codehighlighter1_138_315_Open_Image.style.display='inline'; Codehighlighter1_138_315_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_138_315_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_138_315_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(R</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cos(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Pi</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">i),&nbsp;R</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">sin(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Pi</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">i));<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glFlush();<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_353_607_Open_Image onclick="this.style.display='none'; Codehighlighter1_353_607_Open_Text.style.display='none'; Codehighlighter1_353_607_Closed_Image.style.display='inline'; Codehighlighter1_353_607_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_353_607_Closed_Image onclick="this.style.display='none'; Codehighlighter1_353_607_Closed_Text.style.display='none'; Codehighlighter1_353_607_Open_Image.style.display='inline'; Codehighlighter1_353_607_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_353_607_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_353_607_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutInit(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">argc,&nbsp;argv);<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode(GLUT_RGB&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_SINGLE);<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowPosition(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize(</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">第一个OpenGL程序</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">myDisplay);<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<p>先来看看上面的代码，本程序是在win32 console application，即控制台程序，所以会出现命令行对话框。现在的问题是，这个程序的各个部分到底是什么意思。<br>那么，我就逐个来讲述吧。<br>首先从main函数入口进入，其中main函数的两个参数就是命令行形参，然后对于<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">GL</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">glut.h</span><span style="COLOR: #000000">&gt;，这个是包括的一个glut的头文件，里面定义了很多函数，在运行该程序之前，需要将VC中的相关环境设置好。这里略说。<br>看看第一个函数，从glutInit可以看到就是一个初始化，不错，这个函数的作用就是初始化窗口背景，对于一个程序，在开始运行的时候的初始化工作的重要性，可想而知了，必要而且必须！<br>1.绘制图形的步骤。所有的图形都应该在glBegin()和glEnd()中绘制，否则</span></p>
<p><span style="COLOR: #000000">会默认为为没有绘制的。<br>glBegin(GL_LINES);<br>&nbsp;glVertex2f(0.0f, 0.0f);<br>&nbsp;glVertex2f(2.0f,8.0f);<br>glEnd();</span></p>
<p><span style="COLOR: #000000">其次，glBegin()函数的模式，可以选择</span></p>
<p><span style="COLOR: #000000">GL_POINTS,GL_LINES,GL_POLYGON,GL_LINE_LOOP<br>对于各种模式的说明：<br>GL_POINTS：绘制的是点，也就是单个的点，这样显示的时候不会看到。<br>GL_LINES：绘制的是一条直线，注意点的坐标一定要在绘制的范围内，否</span></p>
<p><span style="COLOR: #000000">则的话会看不到的，我曾经做过，没有显示，还以为错了&#8230;&#8230;<br>GL_POLYGON：显示的是一个多边形，比如在其中绘制了三个点，那么以</span></p>
<p><span style="COLOR: #000000">这种模式显示的话就是一个填充的三角形，为何，因为相当于连接这三个点</span></p>
<p><span style="COLOR: #000000">形成一个多边形的来填充。<br>GL_LINE_LOOP:绘制出来的点将做到首尾相连，试想，如果不是用的这个</span></p>
<p><span style="COLOR: #000000">而是直接用line的话，那么就要手动连接，即在最后一个点的是很放一个首</span></p>
<p><span style="COLOR: #000000">节点连起来。<br>GL_LINE_STRIP:连起来的是一整条的。区别：与line不同，连接的是line </span></p>
<p><span style="COLOR: #000000">的话中间有间隔点就不会连起来，而用这个的话会把相邻的点连起来。</span></p>
<p><span style="COLOR: #000000">2.坐标为原点的在正中间。画出来的，看的。<br>3.画出来的图形是一样：<br>void myDisplay(void)<br>{<br>&nbsp;GLfloat x;<br>&nbsp;int i;<br>&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br>&nbsp;glBegin(GL_LINES);<br>&nbsp;&nbsp;glVertex2f(0.0f, 0.0f);<br>&nbsp;&nbsp;glVertex2f(-0.123f,-0.423f);<br>&nbsp;&nbsp;glVertex2f(0.53f, 0.98f);<br>&nbsp;&nbsp;glVertex2f(0.0f, 0.0f);<br>&nbsp;&nbsp;glVertex2f(-0.123f,-0.423f);<br>&nbsp;&nbsp;glVertex2f(0.53f, 0.98f);<br>&nbsp;glEnd();<br>&nbsp;glFlush();<br>}<br>绘制顺序的是每两个点就做出来一条直线。<br>void myDisplay(void)<br>{<br>&nbsp;GLfloat x;<br>&nbsp;int i;<br>&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br>&nbsp;glBegin(GL_LINE_LOOP);<br>&nbsp;&nbsp;glVertex2f(0.0f, 0.0f);<br>&nbsp;&nbsp;glVertex2f(-0.123f,-0.423f);<br>&nbsp;&nbsp;glVertex2f(0.53f, 0.98f);<br>&nbsp;glEnd();<br>&nbsp;glFlush();<br>}<br>绘制的时候就是对于这三个点首尾相连。绘制的时候对于各个点依次联系，</span></p>
<p><span style="COLOR: #000000">然后依次连起来，并最终结尾首尾，不管有几个点。</span></p>
<p><span style="COLOR: #000000">4. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)<br>初始化显示的模式，第一个参数显示的是以RGB模式，后者是指单缓冲区。<br>详细的后面学习中再遇到。<br>glutInitWindowPosition(200, 200); //初始化窗口的位置，一个点的坐</span></p>
<p><span style="COLOR: #000000">标<br>glutInitWindowSize(500, 500);&nbsp; //窗口的大小，长和宽<br>glutCreateWindow("第一个OpenGL程序");//窗口的名字，title。</span></p>
<p><span style="COLOR: #000000">5.调用相关的函数实现绘制，特别是对于一个绘制，用的是函数，调用下面</span></p>
<p><span style="COLOR: #000000">的是传递一个指针。<br>glutDisplayFunc(&amp;myDisplay);<br>glutMainLoop();<br></span></p>
<img src ="http://www.cppblog.com/deercoder/aggbug/97413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-09-27 23:56 <a href="http://www.cppblog.com/deercoder/articles/97413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>