`
fanguanghui
  • 浏览: 97002 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

移植Opencv 1.10到WINCE/WM

 
阅读更多

本文来自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

第一步 line600: ......修改方法同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

公共问题:
错误131error 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可通过rtmp/rtsp获取视频流人脸识别与并截图

    这可以通过Maven或Gradle的依赖管理工具来实现,添加相应的OpenCV依赖项到项目的构建文件中。安装完成后,我们就可以在JAVA代码中使用OpenCV的功能了。 接下来,我们需要建立一个VideoCapture对象,指定视频流的...

    zynq移植Opencv1

    OpenCV是一款功能强大且广泛应用于计算机视觉领域的开源库,作为嵌入式系统开发者,移植OpenCV到Zynq板卡中是非常重要的一步。下面将详细讲解如何移植OpenCV到Zynq板卡中。 交叉编译OpenCV 在移植OpenCV之前,首先...

    海思Hi3516移植opencv指南.docx

    export PKG_CONFIG_PATH="/home/zdst/opencv/output/lib/pkgconfig" ``` 最后,别忘了更新系统环境变量使更改生效: ```bash source ~/.bashrc ``` #### 五、总结 通过上述步骤,用户可以在海思Hi3516A平台上...

    Cmake编译生成的dll文件缺少libopencv-world450.dll和opencv-videoio-ffmpeg-64

    #use_cache "C:/OpenCv/sources/.cache" #match_hash_in_cmake_cache "OCV_DOWNLOAD_ADE_HASH_3rdparty_ade_v0_1_2d_zip" #match_hash_in_cmake_cache "OCV_DOWNLOAD_FFMPEG_HASH_3rdparty_ffmpeg_opencv_videoio_...

    OpenCV 3.4.1 /opencv/build

    在实际开发中,开发者需要根据自己的需求选择合适的目标平台和配置,将`/opencv/build`目录中的文件集成到项目中,通过正确的链接和引用设置,便能利用OpenCV的强大功能进行图像和视频处理任务。同时,不断学习和...

    OpenCV 2 计算机视觉编程手册.代码,支持 OpenCV 3.x / 4.x

    OpenCV 2 计算机视觉编程手册.代码,支持 OpenCV 3.x / 4.x

    mac 下 使用homebrew 安装的opencv4 ,文件名显示2只是因为是我后面改的

    在Mac OS 10.15.5系统中,安装OpenCV库通常会选择使用Homebrew这一包管理器,因为它是方便、快捷且流行的工具,特别适合处理开源软件的安装问题。OpenCV4是一个强大的计算机视觉库,广泛应用于图像处理、机器学习...

    C# Opencvsharp+yolov3 目标识别.rar

    【实例简介】C# Opencvsharp yolov winform应用 本例子基于开源代码,改成了WINFORM应用 【实例截图】 【核心代码】 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; ...

    opencv for wince

    ”意味着这个OpenCV版本已经经过实际测试,并且能够在WinCE平台上成功运行,这对于开发者来说是非常重要的,因为它降低了移植和调试的难度。这通常涉及到特定的编译配置、库依赖和API调用的适配,确保在WinCE的有限...

    opencv-3.4.1/build/lib

    接下来,引入`opencv-341.jar`到项目类路径中,这样就可以在Java代码中通过`System.loadLibrary("opencv_java341")`加载对应的本地库。一旦加载成功,就可以使用OpenCV提供的Java API来编写计算机视觉程序。 OpenCV...

    opencv4.0库

    #include &lt;opencv2/core/core.hpp&gt; #include &lt;opencv2/highgui/highgui.hpp&gt; #include &lt;opencv2/imgproc/imgproc.hpp&gt; INCLUDEPATH += $$PWD/opencv_lib/build/include DEPENDPATH += $$PWD/opencv_lib/build/...

    opencv-4.7.0源码+安装脚本

    解压后cd进入opencv文件夹后,sudo sh opencv.sh 。 跑完后会在opencv-4.7.0/build/bin/文件夹下出现opencv-470.jar,同时将最关键的libopencv_java470.so放进系统路径。 可以跑下附带的hello.java,看看是否编译...

    opencv人脸/人眼/人体识别分类器

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了众多图像处理和计算机视觉的算法。在本主题中,我们重点关注的是OpenCV中的人脸、人眼和人体识别分类器,这些分类器是预先训练好的模型,用于...

    VC 2010下安装OpenCV 2.0/2.1/2.2

    将`D:\Program Files (x86)\OpenCV\vc2010\bin`添加到Path中,确保系统能够找到OpenCV的动态链接库。 最后,你可以开始使用OpenCV进行编程。在VC++ 2010 Express中创建一个新的Win32控制台项目(如opencvhello),...

    opencv_contrib-3.2.0 【亲测可用】

    3:cmake -DOPENCV_EXTRA_MODULES_PATH=/usr/local/opencv/opencv-3.2.0/opencv_contrib/modules/ /usr/local/opencv/opencv-3.2.0/(注意路径,按照你的路径设置/usr/local/opencv/opencv-3.2.0/opencv_contrib/...

    opencv 4.5.1 mingw编译opencv-ffmpeg的所需的文件

    opencv 4.5.1 mingw编译opencv_ffmpeg的所需的文件 https://raw.githubusercontent.com/opencv/opencv_3rdparty/6152e132572dfdaa32887eabeb7199bef49b14dc/ffmpeg/opencv_videoio_ffmpeg.dll ...

    opencv4.5.3-cache.zip

    contrib4.5.3时候cmake时候缓存文件,只需要将压缩文件夹解压到opencv源码目录下面即可,cmake-gui上configure时候就不会报错,注意解压后文件夹名字是.cache,文件夹名字不能改变,比如opencv/.cache,有的人解压后成...

    opencv-4.10(带nonfree).zip

    C++版本的带nonfree版本的opencv4.1.0,包含了contrib扩展模块,配置后直接使用。适合qt等mingw编译器的平台使用。配置简单

    Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频!

    Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件...

    opencv qt的移植

    在 Linux 下,使用 QT 4.7 和 OpenCV 2.2,实现了将 OpenCV 移植到 TQ2440 开发板的过程。 OpenCV 的安装和配置 首先,需要安装 CMake 和交叉编译器 arm-linux-gcc 4.3.3,然后使用 CMake 创建 Makefile。在 ...

Global site tag (gtag.js) - Google Analytics