移植Opencv 1.10到WINCE/WM

2023-11-01

 本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

 

 如何把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类库。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移植Opencv 1.10到WINCE/WM 的相关文章

  • 消息循环如何使用线程?

    我有点困惑 想知道我是否被误导了 在另一篇文章中 我被告知 只有当你显式创建新线程时才会创建它们 C 程序默认是单线程的 当我打开未在 ollydbg 中显式创建新线程的程序时 我多次注意到通常有 2 个线程在运行 我想了解消息循环如何在不
  • 使用 .Net 检测外部应用程序中的拖放操作

    我需要检测拖放操作外用 是否可以 我想到写一个钩子来检测这些操作 任何人都可以指出我可以尝试挂钩哪些消息或 api 函数来检测拖放事件的正确方向吗 我想用 C 来做这个 提前致谢 您可以通过两条明显的路径来尝试此操作 第一个是挂钩参与调解拖
  • 将 TPopupMenu 与窗体的右侧对齐?

    TPopupMenu 如何与窗体的右侧对齐 问题是 在调用之前似乎没有办法获取弹出菜单的宽度Popup X Y Integer 我正在尝试获得与 Chrome 中的系统菜单类似的行为 你也可以只设置Alignment http docwik
  • C++ GetDIBits 不工作

    首先我加载图像 cool bmp 加载很好 然后我调用函数 getPixArray 但它失败了 case WM CREATE runs once on creation of window hBitmap HBITMAP LoadImage
  • 我需要为我的应用程序制作和加载多大尺寸的 ImageList 图标(考虑更高的 DPI)?

    我有一个CListCtrl http msdn microsoft com en us library hfshke78 aspx控制 或ListView http msdn microsoft com en us library wind
  • 获取正在运行的程序的属性

    我想开发一个程序 其 ID 是一张牌 因为它在另一个正在运行的程序 例如扑克或红心游戏或其他程序 中播放 我首先尝试获取有关已运行的游戏程序的所需信息 但我从一开始就遇到了问题 我正在运行 MSVC 2013 并开发 MFC 应用程序 现在
  • 如何在win32上安装OpenCV 2.0

    我需要在 Win32 上安装 OpenCV 我目前没有安装它 我下载了 OpenCV 2 0 0a win32 exe 并运行它 我现在到底该怎么办 没有 lib之类的东西 我找到了一些使用 cmake 构建版本的说明 http openc
  • 如何使用VerQueryValue?

    我有一个 exe 需要从特定 dll 检索版本信息 例如 FileDescription 我的代码已经调用了 GetFileVersionInfoSize 和 GetFileVersionInfo 但我不知道如何应用 VerQueryVal
  • C++ win32设置光标位置

    我知道要使用哪个功能 但我无法让它正常工作 我用了SetCursorPos 唯一的问题是它将光标设置为屏幕坐标而不是窗口坐标 我也尝试过ScreenToClient 但它并没有起作用 这是我的代码 pt x 113 pt y 280 Scr
  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 如何检测Windows 8.1开始菜单?

    当我们在 Windows 8 1 上按下开始菜单时 它会以磁贴的形式显示所有新的开始菜单以及应用程序 该菜单显示在整个屏幕上 有没有办法检测这个菜单是否在 C 中打开 8 1 SDK 中是否有 winAPI 可以执行此操作 提前致谢 调用
  • Facebook 页面插件无法运行 - 仅适用于一个网站

    我已将页面插件集成到我的目录中 ruhrlink de info php schluessel 150991 不起作用 其他的可以 当我在开发者网站 gt 页面插件中手动输入网址时 它在那里也不起作用 https www facebook
  • 使用 Documents4j 将 Doc 转换为 PDF

    我想尝试使用 Documents4j 将文档转换为 PDF 我按照此处的说明进行操作http documents4j com develop http documents4j com develop 当我打字时mvn package然后按回
  • 如何在没有io的情况下在windows上创建特定大小的文件?

    Windows 上是否有与 posix fallocate 等效的函数 具体来说 我正在寻找一种方法来立即 无需执行大量 IO 创建特定大小的文件 我不关心内容 我尝试过 chsize s 它确实分配了文件 但需要很长时间 如果我右键单击文
  • Windows下如何分配非分页内存

    当我使用 cudaHostAlloc 时 它将分配非分页 固定 页面锁定 内存 我想知道如何在没有 cuda 的情况下仅使用 Windows SDK 来做到这一点 None
  • Windows 上的本机窄字符串编码是什么?

    Subversion API 有一个功能数量 http subversion apache org docs api latest svn utf 8h html用于从 本机编码 字符串转换为以 UTF 8 编码的字符串 我的问题是 Win
  • 预注册 ATL 窗口类

    我在一个项目中使用了 ATL 和 WTL 的组合 并从中派生了我自己的类CWindowImpl 看起来像这样 class CMyControl public CWindowImpl
  • 将依赖项添加到自定义 gradle 插件

    我正在创建一个使用 gson 的 gradle 插件 但是当我在客户端使用该插件时 它会抛出此错误java lang NoClassDefFoundError com google gson Gson我希望我以错误的方式链接插件中的依赖项
  • Eclipse(STS)+ Maven

    我基本上有两个问题 有没有办法从 Eclipse 调用 Maven 控制台 我可以在哪里写eclipse eclipse 并开始构建 eclipse 项目 哪里有STS http www springsource com products
  • WaitForSingleObject 是否充当内存屏障?

    昨天一个关于双重检查锁定的问题引发了一系列的想法 让我对一个简单的情况感到不确定 在下面的代码中 是否可以点击printf 不再同步 在这个简单的示例中 这些值可能位于同一缓存行上 因此我认为这种可能性较小 假设一开始可能性 gt 0 如果

随机推荐

  • 【Windows 11】系统安装修改版 Subsystem for Android 安卓子系统,并用 Magisk Root

    目录 步骤 1 卸载已安装的Window Subsystem for Android 官方版本 2 启用 Hyper V 和 虚拟机平台 3 查看 CPU 处理器是架构 4 下载修改版Windows Subsystem Android安卓子
  • 禁止另存为,不允许看源码,禁止右键

  • 以 Nodejs 为例谈谈如何向开源项目贡献

    前一段时间因为兴趣阅读 Nodejs 的 EventEmitter 相关代码的时候 发现了其中的一个 bug 所以修复后向 Nodejs 提了个 pr 同时也想以此次经历为例谈谈如何向开源项目贡献 发现问题 Returns the numb
  • 【JavaScript】你从未如此了解const、let与var

    引言 ES2015 ES6 推出了许多闪亮的新功能 而let和const却是其中非常亮眼的功能 可用于变量声明 那么它们与var有和不同呢 内容速递 看了本文您能了解到的知识 在本文中 我们将讨论var let和const的作用域 用途和变
  • MFC/C++ CFile写入文件数据,输出utf-8的文本。(防止中文乱码)

    需求说明 有时候用CFile写入文件的内容会出现中文乱码问题 这时候就需要把写入的文件编码类型改为utf 8的类型 代码功能 输出utf 8格式的内容到文件中 作者 weekdawn try 创建mht文件 并写入数据 mhtFile Op
  • 第16课:生活中的备忘模式——好记性不如烂笔头

    用程序来模拟生活 从剧情中思考备忘模式 备忘录模式 备忘录模式的模型抽象 类图 代码框架 模型说明 实战应用 应用场景 故事剧情 经过两三年的工作 Tony 学到的东西越来越多 业务也越来越熟 终于到了他该带领一个小组进行独立开发的时候了
  • 21天Jenkins打卡Day16-清理工作空间

    参考文章 http istester com jenkins 447 html
  • 【Python】ftfy 包的理解和使用

    一 介绍 ftfy 是一个用于修复和清理 Unicode 文本的 Python 软件包 它的全称是 fixes text for you 意思是它可以自动检测和纠正常见的 Unicode 文本问题 Unicode 是一种字符编码标准 用于表
  • 样式兼容性的问题。

    这里的所属公司 公司名有时候长 有时候短 要考虑长度问题 高度要写活 让他换行 使用pading 去控制高度
  • 如何快速实现Modbus RTU和Modbus TCP协议转换?

    Modbus协议是工业现场串口设备之间常用的连接方式 其中最常见的就是Modbus RTU和Modbus TCP两种 许多工厂需要将现场各种不同型号设备的数据都能够通过一个上位机软件或者设备触摸屏整合起来监控管理 目前上位机大部分用的Mod
  • element table表格滚动条

    项目场景 table表头过长需要添加滚动条 问题描述 原因 一般情况表头过长 会自动出现滚动条 但是在大型项目开发过程中 有的情况会在总的母版文件中设置禁用滚动条 所以当需要滚动条时 找不到 解决方案 添加css样式 display blo
  • VS中写QT的软件如何输出安装包exe文件

    1 选择Release 和对应的平台 我这里是X64的 2 点击本地Windows调试器 在项目文件当中找到release中找到自己的exe文件 3 复制exe文件到新的文件夹 然后打开对应平台的命令行 我这里是64位的所以要选VS 201
  • 奖励模型Reward Model如何训练?

    image png 如上图所示 ChatGPT 并不是直接让人工去标注每一句话的真实得分是多少 尽管模型最终要预测的就是每句话的得分 而是让人去对 4 句话按照好坏程度进行 排序 通过这个 排序序列 模型将会学习如何为每一个句子进行打分 用
  • Fabric模块功能介绍(一)

    主要有5个模块 分别是peer orderer cryptogen configtxgen configtxlator 模块 功能 peer 主节点模块 负责存储区块链数据 运行维护链码 orderer 交易打包 排序模块 cryptoge
  • python爬虫+数据分析(MySQL)+可视化(echarts,词云)bootstrap前端界面展示

    以下需要一些html css mysql python bootstrap基础 python爬虫 数据分析 准备 在pycharm python的开发环境 需下载 该项目下下载相应需要的包 代码有 import re from bs4 im
  • 在网页中嵌入天气信息

    方式1 在后台通过webservice天气接口信息 比较好自定义和灵活设置但是代码量和复杂度都比较大 方式2 使用js库调用 原始漂亮 但是局限性比较大 方式3 使用一些平台开放的代码 可以直接使用 样式多样 分享 http weather
  • 数据库驱动mysql-connector-java-5.1.46-bin.jar下载及在idea中导入该jar包

    数据库驱动mysql connector java 5 1 46 bin jar下载及在idea中导入该jar包 参考资料 https www cnblogs com bj171104 p 12705567 html https blog
  • Object.setPrototypeOf 与 Object.create() 的区别

    在讲之前 我们先回顾下创建对象的几种方式 并且Object new Object 和 Object create 的区别 字面量方式创建对象 let person name nick 构造函数式创建对象 let person new Obj
  • 【yarn】yarn LocalizedResource 状态机正常执行流程

    1 概述 上一篇文章 Yarn Yarn Service端如何处理客户端提交的任务 在上一篇文章中 我们知道服务器接收到客户端提交的任务之后 会启动多个状态机进行联合操作 最终来解决任务提交之后的全流程 多个状态机合作完成任务 然后我们看了
  • 移植Opencv 1.10到WINCE/WM

    本文来自http blog csdn net hellogv 引用必须注明出处 如何把opencv1 10移植到wince WM 因为如果懂得裁剪opencv 那么就可以在更多设备 PC 手机 开发板 上玩更多更好玩的算法 因此 移植和裁剪