移植Opencv 1.10到WINCE/WM

來源:互聯網
上載者:User

 本文來自http://blog.csdn.net/hellogv/ ,引用必須註明出處!

上次寫了在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類庫。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.