HardBirch

移植Opencv 1.10到WINCE/WM

时间:10-07-08 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:17 点击: 6,545 次

上次写了在C#玩OpenSURF的演示,这次就写写如何把opencv1.10移植到wince/WM。因为如果懂得裁剪opencv,那么就可以在更多设备(PC,手机,开发板)上玩更多更好玩的算法,因此,移植和裁剪opencv还是很有必要的。我已经移植到wince/WM上的opencv1.10工程可以到这里:http://www.pudn.com/downloads270/sourcecode/embed/detail1235697.html,工程只含cv和cvcore这两个核心项目,highgui与系统粘合度太大,不好移植,迟点会贴出实现部分highgui功能的例子。

本文参考:http://www.computer-vision-software.com/blog/2009/03/running-opencv-facedetect-sample-on-pocket-pc/

接下来,废话不说,直接把移植cv和cvcore的步骤贴上:

 

【CVCORE项目】
cxmisc.h, line 125 to
#elif defined WIN32 || defined WIN64 || defined WINCE

cxswitcher.cpp,由于这个文件修改很多,所以建议从尾部往上修改,这样容易根据行数查找。

第六步line 57 to
#if defined WIN32 || defined WIN64 || defined WINCE

第五步 line 90 to
#if defined WIN32 && !defined  WIN64 && !defined WINCE

第四步 line 137:

#ifndef WINCE
“HARDWARE//DESCRIPTION//SYSTEM//CentralProcessor//0//”,
#else
L”HARDWARE//DESCRIPTION//SYSTEM//CentralProcessor//0//”,
#endif

第三步 line 140:

#ifndef WINCE
“~MHz”,
#else
L”~MHz”,
#endif

 

第二步 line 435:

#ifdef WINCE
size_t origsize = strlen(name) + 1;
WCHAR wname[100];
MultiByteToWideChar(CP_ACP,0,name,origsize,wname,100);
addr = (uchar*)GetProcAddress( plugins[idx].handle, wname );
#else
addr = (uchar*)GetProcAddress( plugins[idx].handle, name );
#endif

第一步 line 600: ......修改方法同line 435

cxerror.cpp line 45 to
#if defined WIN32 || defined WIN64 || defined WINCE

line 92 加入

#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)

 

line with DllMain to
#if defined WIN32 || defined WIN64
BOOL WINAPI DllMain(
#ifdef WINCE
HANDLE
#else
HINSTANCE
#endif
, DWORD  fdwReason, LPVOID )

 

a fragment in cvGuiBoxReport to

        sprintf( message, “%s (%s)/nin function %s, %s(%d)/n/n”
“Press /”Abort/” to terminate application./n”
“Press /”Retry/” to debug (if the app is running under debugger)./n”
“Press /”Ignore/” to continue (this is not safe)./n”,
cvErrorStr(code), err_msg ? err_msg : “no description”,
func_name, file, line );
sprintf( title, “OpenCV GUI Error Handler” );
#ifdef WINCE
WCHAR wmsg[2048];
MultiByteToWideChar(CP_ACP,0,title,strlen(message),wmsg,2048);
int answer = MessageBox( NULL, wmsg, L”OpenCV GUI Error Handler”,

MB_ICONERROR|MB_ABORTRETRYIGNORE);
#else
int answer = MessageBox( NULL, message, title,

MB_ICONERROR|MB_ABORTRETRYIGNORE|MB_SYSTEMMODAL );
#endif

 

cvtypes.h的#include <emmintrin.h>的宏定义改为:

  #if defined WIN32 && (!defined WIN64 || defined EM64T) &&(!defined WINCE)&& /
(_MSC_VER >= 1400 || defined CV_ICC) /
|| (defined __SSE2__ && defined __GNUC__ && __GNUC__ >= 4)

 

 

【CV工程】


_cvkdtree.hpp的accum_type maxvar = -std::numeric_limits < accum_type >::max(); 加上#undef max

 

 

公共问题:
错误 131 error LNK2001: 无法解析的外部符号 "const type_info::`vftable'" (
??_7type_info@@6B@) 

cvsmooth.obj.
引入Ccrtrtti.lib解决

 

工程转换

把原cv和cvcore工程直接转换为wince (PPC 2003 (ARM V4))的时候,工程-->属性-->平台-->把WIN32新建为 PPC 2003,
属性-->C/C++-->预处理器:
NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;_USRDLL;CV_CE_EXPO

RTS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE。

最好把C/C++的优化改为最大化速度(/O2),代码速度优先(/Ot)。

 

总结,移植opencv到wince,概括来说,只需要用宏定义设置好(区分WINCE和WIN32),以及把字符编码的转换搞定了,CV和CVCORE是很容易移植到wince的,同样道理,也可以移植到其他支持平台。不过针对运算部分的优化,就要靠用户自己了,OPENCV跨平台的时候是使用C/C++标准的Math类库。。。

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 移植Opencv 1.10到WINCE/WM

移植Opencv 1.10到WINCE/WM:目前有17 条留言

  1. 17楼
    egmkang:

    为什么是pudu[e08]

    2010-07-08 16:11 [回复]
  2. 16楼
    egmkang:

    说错了,pudn

    2010-07-08 16:12 [回复]
  3. 15楼
    hellogv:

    回复 egmkang:
    我也不想,我已经上传到CSDN的下载频道了,但是下载频道要很久才更新放出下载链接。。。。用PUDN的快些

    2010-07-08 16:14 [回复]
  4. [e01]

    2010-07-09 12:38 [回复]
  5. 13楼
    chenchangwen:

    ssdddddddddddddddd

    2010-07-09 22:23 [回复]
  6. 12楼
    chenchangwen:

    回复 chenchangwen:[e03][e02][e01][e01]

    2010-07-09 22:30 [回复]
  7. 11楼
    chenchangwen:

    回复 chenchangwen:[e01][e02][e03][e04][e05][e06][e08][e09][e10]

    2010-07-09 22:30 [回复]
  8. 楼主头上有很多光环, 要注意收好.

    2010-07-10 12:34 [回复]
  9. 请问作者,修改后上面的文件后,怎么重新编译opencv,怎么移植到VM,如果作者能写个更详细的说明文档就好了,提交到opnecv论坛肯定受欢迎

    2010-09-03 19:51 [回复]
  10. 另外,opencv1.10是什么版本,官网上只有opencv1.0和opencv1.1 pre 1…….

    2010-09-03 21:32 [回复]
  11. 还有,不知作者是否尝试过将opencv2.0进行移植,如果成功,还盼贴出帖子,非常渴求~~~

    2010-09-03 23:13 [回复]
  12. 6楼
    cooska:

    强烈建议楼主把资源放到csdn的下载里

    2011-02-18 12:01 [回复]
  13. 5楼
    caiyu274:

    楼主 可否详细介绍一下生成lib 之后该如何做呢?

    2011-03-03 14:43 [回复]
  14. [e03]膜拜下!

    2011-03-24 09:16 [回复]
  15. 地板
    kaca0083:

    你好,我在编译你的工程的时候发现在release模式下编译不通,但在debug模式下就可以。请问这是为什么呢?另外pc目录下的项目和ppc目录下的项目除了solution platform不一样之外,还有什么别的地方有配置改动吗?

    2011-12-27 22:51 [回复]
  16. 板凳
    kaca0083:

    另外想问一下本文提到的highgui的功能实现了没有?毕竟读取和保存图像的操作还是很有必要的。

    2011-12-27 23:49 [回复]
  17. 沙发
    hellogv:

    [reply]kaca0083[/reply]
    highgui等于重写了。。。建议还是自己实现个轻量级的来做读取和显示

    2011-12-30 15:02 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐