C++ Builder中使用OpenCV(转)

C++ Builder中使用OpenCV

http://blog.163.com/super_may/blog/static/28544532008101584612266/

OpenCV 2008-11-15 20:46:12 阅读493 评论0   字号: 订阅

C++ Builder中使用OpenCV  
<1> 转换原来的lib文件
建立如下批处理文件:
coff2omf -lib:ms  lib/cv.lib                 bcb/cv.lib
coff2omf -lib:ms lib/cvaux.lib              bcb/cvaux.lib
coff2omf -lib:ms  lib/cvcam.lib              bcb/cvcam.lib
coff2omf -lib:ms  lib/cvhaartraining.lib     bcb/cvhaartraining.lib
coff2omf -lib:ms  lib/cxcore.lib             bcb/cxcore.lib
coff2omf -lib:ms  lib/cxts.lib               bcb/cxts.lib
coff2omf -lib:ms  lib/highgui.lib            bcb/highgui.lib
coff2omf -lib:ms  lib/ml.lib                 bcb/ml.lib 

 <2> 在WINDOWS系统变量里面添加 OPENCV 为 X:/Program Files/OpenCV,添加搜索路径X:/Program Files/OpenCV/bin
 <3>CB的IDE设置“工具”->“环境变量”->“库”,在“库路径”里面添加
Tools->Options->Environment Options->C++ Options Paths and Directories添加(CB2007)
 $(OPENCV)/bcb;$(OPENCV)/bin

<4>新建一个C的控制台工程,不要VCL支持。然后选择“工程”->“添加到工程”,把刚才转换好的.lib文件添加到工程中即可。
在Directories/Conditonals 里面的Include Path 添加
$(OPENCV)/cv/include;$(OPENCV)/cxcore/include;$(OPENCV)/otherlibs/highgui;
$(OPENCV)/cvaux/include;$(OPENCV)/otherlibs/cvcam/include
OpenCV2.0只有一个目录$(OPENCV)/include/opencv

在Library Path 里面添加 $(OPENCV)/bcb
General Compilation的Calling Convention改为C
Conditional Defines 中加入 SKIP_INCLUDES


<5> 编辑你的代码,添加相应的LIB文件,调试允许吧:

示例程序:
    读取 lena.jpg 图象并显示:
------------------------------------------------------------------------------
#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

int main(int argc, char *argv[])
{
    IplImage *img = cvLoadImage("lena.jpg");
    cvNamedWindow("Image:", 1);
    cvShowImage("Image:", img);

    cvWaitKey();
    cvDestroyWindow("Image:");
    cvReleaseImage(&img);
   
    return 0;
}

1、OpenCV2.1 用CMAKE2.8按照VS2005做了configure,在VS2005中编译生成库成功;
2、用 COFF2OMF 转换了 OpenCV 的库;
3、CB2007 中添加了 OpenCV 的 include 路径、lib 路径;
4、修改 highgui.h,该文件最后有关 New interface 的部分 #include "highgui.hpp",CB2007 下如果包含这个 highgui.hpp 会编译失败,其实是可以不需要的。所以作如下修改(添加两行条件判断语句,如果是 CB 环境就不包含):
把#include "highgui.hpp",修改为以下
#ifndef __BORLANDC__
#include "highgui.hpp"
#endif
5、CB2007 中新建工程,#include <cv.h> #include <highgui.h>,其他什么都暂时不写;
6、在 Project -> Options 的 Paths and Defines 选项的 Conditional Defines 中加入 SKIP_INCLUDES 和 _FM_NO_REMAP,添加时 Build Configuration 建议选择 Base;
7、CB2007 编译,出错:[BCC32 Error] complex(194): E2316 '_fm_atan2l' is not a member of 'std'
修改fastmath.h文件

开始修改为

#ifdef __cplusplus
namespace std {
#endif
#ifdef __cplusplus
extern "C" {
#endif

结束修改为

#ifdef __cplusplus
} // extern
} // std
#endif


注意:在BCB中不能使用cvGetSize,自己写一个 cvGetSize 函数取代 OpenCV 库中会出错的 cvGetSize 函数
函数写法请参考 http://www.opencv.org.cn/index.php/BCB%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV
取代原因请参考 http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=3424&p=34604&hilit=bcb#p34604
目前我已初步测试通过。

OpenCV2.1在CBXE下的支持

CBXE的coff2omf 不能用,会出错,但可以使用RAD2007下的

你可能感兴趣的:(C++ Builder中使用OpenCV(转))