本文来自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类库。。。
分享到:
相关推荐
这可以通过Maven或Gradle的依赖管理工具来实现,添加相应的OpenCV依赖项到项目的构建文件中。安装完成后,我们就可以在JAVA代码中使用OpenCV的功能了。 接下来,我们需要建立一个VideoCapture对象,指定视频流的...
OpenCV是一款功能强大且广泛应用于计算机视觉领域的开源库,作为嵌入式系统开发者,移植OpenCV到Zynq板卡中是非常重要的一步。下面将详细讲解如何移植OpenCV到Zynq板卡中。 交叉编译OpenCV 在移植OpenCV之前,首先...
export PKG_CONFIG_PATH="/home/zdst/opencv/output/lib/pkgconfig" ``` 最后,别忘了更新系统环境变量使更改生效: ```bash source ~/.bashrc ``` #### 五、总结 通过上述步骤,用户可以在海思Hi3516A平台上...
#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/build`目录中的文件集成到项目中,通过正确的链接和引用设置,便能利用OpenCV的强大功能进行图像和视频处理任务。同时,不断学习和...
OpenCV 2 计算机视觉编程手册.代码,支持 OpenCV 3.x / 4.x
在Mac OS 10.15.5系统中,安装OpenCV库通常会选择使用Homebrew这一包管理器,因为它是方便、快捷且流行的工具,特别适合处理开源软件的安装问题。OpenCV4是一个强大的计算机视觉库,广泛应用于图像处理、机器学习...
【实例简介】C# Opencvsharp yolov winform应用 本例子基于开源代码,改成了WINFORM应用 【实例截图】 【核心代码】 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; ...
”意味着这个OpenCV版本已经经过实际测试,并且能够在WinCE平台上成功运行,这对于开发者来说是非常重要的,因为它降低了移植和调试的难度。这通常涉及到特定的编译配置、库依赖和API调用的适配,确保在WinCE的有限...
接下来,引入`opencv-341.jar`到项目类路径中,这样就可以在Java代码中通过`System.loadLibrary("opencv_java341")`加载对应的本地库。一旦加载成功,就可以使用OpenCV提供的Java API来编写计算机视觉程序。 OpenCV...
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> INCLUDEPATH += $$PWD/opencv_lib/build/include DEPENDPATH += $$PWD/opencv_lib/build/...
解压后cd进入opencv文件夹后,sudo sh opencv.sh 。 跑完后会在opencv-4.7.0/build/bin/文件夹下出现opencv-470.jar,同时将最关键的libopencv_java470.so放进系统路径。 可以跑下附带的hello.java,看看是否编译...
OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了众多图像处理和计算机视觉的算法。在本主题中,我们重点关注的是OpenCV中的人脸、人眼和人体识别分类器,这些分类器是预先训练好的模型,用于...
将`D:\Program Files (x86)\OpenCV\vc2010\bin`添加到Path中,确保系统能够找到OpenCV的动态链接库。 最后,你可以开始使用OpenCV进行编程。在VC++ 2010 Express中创建一个新的Win32控制台项目(如opencvhello),...
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的所需的文件 https://raw.githubusercontent.com/opencv/opencv_3rdparty/6152e132572dfdaa32887eabeb7199bef49b14dc/ffmpeg/opencv_videoio_ffmpeg.dll ...
contrib4.5.3时候cmake时候缓存文件,只需要将压缩文件夹解压到opencv源码目录下面即可,cmake-gui上configure时候就不会报错,注意解压后文件夹名字是.cache,文件夹名字不能改变,比如opencv/.cache,有的人解压后成...
C++版本的带nonfree版本的opencv4.1.0,包含了contrib扩展模块,配置后直接使用。适合qt等mingw编译器的平台使用。配置简单
Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件...
在 Linux 下,使用 QT 4.7 和 OpenCV 2.2,实现了将 OpenCV 移植到 TQ2440 开发板的过程。 OpenCV 的安装和配置 首先,需要安装 CMake 和交叉编译器 arm-linux-gcc 4.3.3,然后使用 CMake 创建 Makefile。在 ...