现在的位置: 首页 > 综合 > 正文

opencv 图像处理

2018年01月14日 ⁄ 综合 ⁄ 共 4751字 ⁄ 字号 评论关闭

官方网站  www.opencv.org.cn

 

一前辈的日志  : http://vinjn.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart

另一前辈的日志  : http://blog.csdn.net/gnuhpc/category/549384.aspx

opencv 数据读写操作+图像噪声+ MFC下OpenCV源代码  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=5299

OpenCV能实现运动目标的自动提取再跟踪吗  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=7885&start=0

利用MFC的Picture控件显示图像和视频/摄像头画面(VS2008+OpenCV2.0)  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=8309&start=0

差不多的两个用于背景前景分割的混合高斯建模效果差别咋就这么大呢?  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=3722&start=0&hilit=cvCreateGaussianBGModel

抠像或者抠图(人脸检测中应用)  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=8725&start=0

图像直方图 + 图片控件 + 区域复制 【vs2008+OpenCV2.0】  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=8899&start=0

一个人脸-人眼检测例程,大家可以参考参考  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4385&start=0

OpenCV2.0-VC2008编译版打包共享!  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=8811&start=0

基于MFC的opencv人脸检测程序(源代码)  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=7845&start=0

在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)  : http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4603&start=0

 迈克老狼的opencv学习帖子http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4648&p=16794&hilit=%E5%B9%B3%E5%9D%87%E8%83%8C%E6%99%AF%E5%BB%BA%E6%A8%A1#p16794

 

 

以HMMDemo为例
1、将OpenCv安装目录下的cv、cvaux、otherlibs/highgui三个目录复制到你的工程目录下,再在工程目录下新建一个camera目录,将安装目录下的apps/Common目录中的两个文件复制至camera目录中。
2、在集成开发环境的项目管理窗口中(FileView)新建六个文件夹,分别为highgui_src,highgui_include,cvaux_include,cvaux_src,cv_include,cv_src
3、将项目管理窗口中Source Files中的Camera.cpp(如果有的话)及Header Files中的Camera.h(如果有的话)的路径改为工程目录下的camera目录。
4、在项目管理窗口中右击cv_include项,选择Add Files to Folder...,将第1步中已复制至工程目录下的cv目录下的include目录中的.h文件添加到该项目管理文件夹中。接着按相同做法将cv目录下的src目录中的.cpp文件添加到cv_src项目管理文件夹中。对cvaux_include、cvaux_src,highgui_include,highgui_src亦如此操作。两点注意,第一是工程目录下的highgui目录下不再分include和src,但操作相同;第二是为cvaux_src添加.cpp文件时不要添加cvaux.cpp,因为这个文件包括了cv.h,链接时会有重复定义的错误。
5、右击cv_src,选择Setting...,选择C/C++页,在Category选择Precompiled Headers,再选择下面四个单选项中的第一项”Not using precompiled headers”。这样做的目的是不使用编译头文件,否则会产生“找不到文件结尾”的错误。也可以在每个.cpp文件的开头加入include ”stdafx.h”,但显然没有更改一个选项来得方便。对cvaux_src及highgui_src也进行相同操作。
6、为工程的编译编译选项(Project->Settings...->C/C++)增加/Zm200,作用是增加堆栈的最大限制,因为cvaux_src中有个文件用到了一个很大的常数数组,200不够大的可以300,400......。
7、在Project->Settings...->C/C++中,选择Category中的Preprocessor项,把Additional include directories改为cv/include,cv/src,highgui,camera,cvaux/include,cvaux/src
8、Project->Settings...->Link,如果Object/library modules中有cv.lib,cvaux.lib,highgui.lib,删除之。注意cvd.lib为Debug版,cv.lib为Release版。
9、Project->Settings...->General,将Output directories下的两个框改为Debug,这个是中间文件(.obj等)的输出目录。Project->Settings...->Link,将Output file name改为Debug/XXX.exe,这个是最终可执行文件的输出目录。
好了,你的项目已经可以脱离OpenCV安装环境编译了,编译出来的程序也可以脱离OpenCV的动态链接库运行了。

 

 出处:http://blog.csdn.net/jarodpku/archive/2008/10/15/3081298.aspx

 

 OpenCV现在的版本是1.0,已经很长时间没有更新了,不知道下个版本什么时候放出。其实,OpenCV的.dll文件并不多,如果想脱离这些.dll,使用静态库的话,那么一个小小的程序也差不多近2MB了。不过为了演示及发布方便,编译为静态库也算是一种需要吧。

想编译成静态库,就需要了解一个知识:运行库(Runtime Library)。运行库是最基本的库,配合C++的语法及操作系统实现了一些基本的功能,如内存操作(new/delete等)等。可以说运行库是任何程序,库的基础。在VC(2005以上)中有四种运行库:Multi-threaded、Multi-threaded-Debug、Multi-threaded-dll、Multi-threaded-debug-dll:前两个为一组,是静态类型库,提供的函数会被链接到最后的程序中,其中两者的区别就在于一个带些调试用的信息及检查代码;后两个为一组,是动态库,最后会以动态链接库的形式(如在VC2008中为MSVCR90.dll或MSVCR90D.dll),提供函数给程序调用。当编译项目的时候,以上四种运行库,只能选择其中一种;若项目还引用了其它库,那么被引用的库应该与这个项目使用同样的运行库。否则,或者链接不能通过,或者是出现链接警告。试想,如果同时选择了Multi-threaded、Multi-threaded-Debug,那么就有两种new的实现方法,链接器应该选择谁呢?(其实,也并不是不能组合两种运行库如一个用msvcr90.dll的a.dll和使用此a.dll的.exe程序,只不过两种运行库不能链接到同一程序中.)所以,想要地发布能独立运行的OpenCV程序,就需要让程序引用的各个库都统一的为Multi-threaded或Multi-threaded-debug。

OpenCV 1.0 for Windows安装好后,在bin目录下,有已经编译好的Multi-threaded-dll版本的.dll库,但这不是独立程序所需。以下要说明的是如何使用Multi-threaded运行库的方法。在_make目录里,打开opencv.sln。项目中有cv、cvaux、cvinfo、cvspamle、cvtest、cxcore、cxcoretest、cxts、highgui、ml等共10个小工程,其中cv、cvaux、cxcore、cxts、highgui、ml等6个工程为需要编译的库。首先,要解决代码上的一个bug:打开cvaux工程的cvaux.h文件,仔细看1137行,/**/注释的后半部分打错成?号了,改回来。接着,切换到Release版,同时选中6个工程,然后更改属性:A.在General下,改Output Directory,这是改变库的输出路径;B.同General下,改Configuration Type为Static Library (.lib)。这表示要生成静态库;C.在/C++/Code Generation下,选择Multi-Threaded,这是我们需要的运行库。这样,便能生成需要的静态库了。(之前写的文章说highgui还需要特别设置,那是多余的)

以上过程只是完成了非常简单的一部分,我们还需要打开otherlibs/_graphics/src目录下的graphic_lib.sln项目,做同样的更改,编译出Multi-Threaded的静态库(默认的为Multi-Theaded Dll的库)。但是,libjasper.lib这个库没有源码,得从网上下载后,编译为相应的版本。这样,准备工作算是完成了。

要生成独立的程序,还需要设置。可以拿cvsample来测试。同样在Release版下,首先,C++/Code Generation要改为Multi-Threaded。其次,Linker/General下,Additional Library Directories要添加上刚才这些静态库的的路径如otherlibs/_graphics/lib。最后,在Linker/Input中,Additional Dependencies里,添加先前生成的静态库名字cxcore.lib cv.lib highgui.lib libjpeg.lib libpng.lib libtiff.lib libjaspermt.lib zlib.lib comctl32.lib。(注意comctl32.lib也需要添上)。编译后,用Depends软件,看生成的cvsample.exe是否只包含系统里一些基本的.dll文件。如果是这样,那表明已经成功了。注意看是否有链接错误,有的话,说明cvsample所依赖的库里,有非Multi-threaded版本的运行库。

 

 

 

 

 

 

抱歉!评论已关闭.