我尝试使用OpenCV的库对于一些图像处理用C ++ / CX我的Windows 8商店应用中。 我能够建立使用Visual C ++ 2012 OpenCV库,但是当我打包我的应用程序并运行Windows应用程序认证工具包 ,我得到几个错误说OpenCV的DLL中使用一些不支持的Windows API。 如何解决这些错误?
Answer 1:
我已经成功地建立的OpenCV对ARM的一个子集。
我开始通过获取子集我感兴趣的是建立在x86的Windows应用商店的应用程序。 在OpenCV的来源下载CMake的指点后,我用的Visual Studio 11发生器配置x86的项目。 我添加了一个新的构建选项中的CMake称为TARGET_METRO,并用它来进一步配置等项目。
这让我关闭一些第三方组件,我不想打造,例如:
OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" ON IF (NOT IOS AND NOT TARGET_METRO) )
我关掉WITH_VIDEOINPUT,BUILD_PERF_TESTS和BUILD_TESTS以这种方式。 我还添加了由拉曼提到当TARGET_METRO是对的定义:
if(TARGET_METRO)
add_definitions(-DWINAPI_FAMILY=WINAPI_FAMILY_APP)
add_definitions(-D_UNICODE)
endif()
我接着产生了x86(的Visual Studio 11)与C进行项目的版本,并开始尝试构建项目。 你会遇到一些问题,其中大部分涉及到的WinRT API的缺失。 其中大部分是机械变化(例如,换出InitializeCriticalSection
为InitializeCriticalSectionEx
)。 我包下这些变化#if WINAPI_FAMILY == WINAPI_FAMILY_APP
,这样就不会影响非TARGET_METRO构建。
当是时候建立ARM,我所做的就是推出CMake和使用Visual Studio 11发生器来产生一个新的项目(一个名为“ARM”目录下),然后开始手动编辑生成的项目文件。
你需要做的主要变化是:
- 更改所有“的Win32”到“ARM”所有vcxproj文件(的3rdParty \ IlmImf包括含有“Win32的”文件名,小心地改变这些实例回)
- 对于所有的项目,添加
<AppContainerApplication>true</AppContainerApplication>
到全局的PropertyGroup - 对于ZERO_CHECK项目,改变ConfigurationType为“DynamicLibrary”而不是“实用程序”(作为实用型将无法建立)
添加在项目级别(每个项目要建立ARM)以下内容:
<ItemDefinitionGroup> <ClCompile> <CompileAsWinRT>false</CompileAsWinRT> </ClCompile> <Link> <SubSystem>Console</SubSystem> <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries> <GenerateWindowsMetadata>false</GenerateWindowsMetadata> </Link> </ItemDefinitionGroup>
从链接:删除“X86 /机”:其他选项(如果是在那里)
- 从另外的依赖关系删除GDI32.LIB,winspool.lib,SHELL32.LIB和comdlg32.lib(这些库不存在ARM)
Answer 2:
OpenCV的使用CMake的构建其来源。 你已经下载了OpenCV的来源后,在根文件夹中编辑文件的CMakeLists.txt包含以下两行:
add_definitions(-DWINAPI_FAMILY = WINAPI_FAMILY_APP)add_definitions(-D_UNICODE)
在以下#if块:
如果(Win32和NOT MINGW)
通过这样做,你的图书馆将只能访问所支持的Windows Store应用程序的API。 这可能意味着你将不得不解决一些构建错误(无不是太多,当我上周尝试过),但最终你的二进制文件将WACK干净。
但上述步骤将只适用于x86成功和x64建立的OpenCV。 这是使用OpenCV的CMake的工具,还不支持Visual C ++ 2012吨的项目为ARM架构。 这个问题正在被跟踪了这个bug 。
更新
现在有支持构建Windows应用商店和Phone应用(包括8.0和8.1)的CMake的端口。 查看详情这里: http://cmakems.codeplex.com/
第二次更新
下面的视频演示了OpenCV的书面一个Windows 10通用应用工作使用C ++: http://channel9.msdn.com/Events/Build/2015/3-82
Answer 3:
我们正在实现的OpenCV与CMake的新手机和商店的构建。 在此期间有你看着http://github.com/msopentech/openCV 。 这对构建OpenCV进行WinRT的说明。
Answer 4:
免责声明:我是100%的新的OpenCV的库,刚开始探索这个今天当我发现使用的OpenCV围绕Azure的认知视野样品一些示例应用程序。
我唯一的目标是即使看“OpenCV的是在UWP支持,与ARM的作品”。 我读了一堆文章,并且是出现自2015+的博客,他们都让我觉得这是不可能获得工作。
然后我发现这个样本: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraOpenCV
并可以确认它适合我的基本测试,你可以在这里看到ARM PI 2的我的视频运行UWP应用程序,使用OpenCV库: https://twitter.com/LyalinDotCom/status/982830053355470848
不是说,这意味着所有的OpenCV只会工作,但至少在这个测试是一个好兆头,我想在这里分享我的初步结果。