Использование OpenCV в приложении Windows Store с Visual C ++

Я пытаюсь использовать библиотеку [OpenCV](http://opencv.org/) для некоторой обработки изображений в
моем приложении для Windows 8 Store с использованием C ++/CX. Я
могу построить библиотеку OpenCV с помощью Visual C ++ 2012, но
когда я упакую свое приложение и запустил [Комплект сертификации приложений Windows](https://msdn.microsoft.com/en-us/library/hh848075%28v=vs.85%%2029.aspx) , я
получаю несколько ошибок, говорящих, что DLL OpenCV использует
некоторые неподдерживаемые Windows API. Как исправить эти
ошибки?

OpenCV использует CMake для создания своих источников. После
того, как вы загрузили источники OpenCV, в корневой папке
отредактируйте файл CMakeLists.txt, содержащий следующие две
строки:

add\_definitions (-DWINAPI\_FAMILY = WINAPI\_FAMILY\_APP)
  add\_definitions (-D\_UNICODE)

в следующем блоке #if:

если (WIN32 И НЕ MINGW)

Делая это, ваша библиотека будет иметь доступ только к API,
который поддерживается для приложений Windows Store. Это может
означать, что вам придется исправить некоторые ошибки сборки (их
было не так много, когда я пробовал на прошлой неделе), но в
конечном итоге ваши двоичные файлы будут WACK чистыми.

Но вышеприведенные шаги будут успешными только для сборки x86 и
x64 OpenCV. Средство CMake, которое используется OpenCV, пока не
поддерживает проекты Visual C ++ 2012 для архитектуры ARM. Эта
проблема отслеживается [этой
ошибкой](https://www.cmake.org/Bug/view.php?id=13511) .

Обновить
--------

There is now a port of CMake that support building Windows Store
and Phone apps (both 8.0 and 8.1). See details here: [http://cmakems.codeplex.com/](https://cmakems.codeplex.com/)

Second Обновить
---------------

The below video shows OpenCV working in a Windows 10 Universal
app written using C++: <http://channel9.msdn.com/Events/Build/2015/3-82>



Мне удалось создать подмножество OpenCV для ARM.

Я начал с получения подмножества, которое мне было интересно
создать для приложений Windows Store в x86. После указания CMake в
исходной загрузке OpenCV я использовал генератор Visual Studio 11
для настройки проекта x86. Я добавил новый вариант сборки в CMake
под названием TARGET\_METRO и использовал его для дальнейшей
настройки других проектов.

Это позволило мне отключить несколько сторонних компонентов,
которые я не хотел создавать, например:

```
OCV_OPTION(BUILD_PERF_TESTS   "Build performance tests"  ON  IF (NOT [iOS](/tag5122) AND NOT TARGET_METRO) )

```

Я отключил WITH\_VIDEOINPUT, BUILD\_PERF\_TESTS и BUILD\_TESTS таким
образом. Я также добавил определения, упомянутые Raman, когда
TARGET\_METRO был включен:

```
if(TARGET_METRO)
    add_definitions(-DWINAPI_FAMILY=WINAPI_FAMILY_APP)
    add_definitions(-D_UNICODE)
endif()

```

Затем я начал генерировать версию проекта x86 (Visual Studio 11)
с помощью CMake и начал пытаться построить проект. Вы столкнетесь с
рядом проблем, большинство из которых связаны с отсутствием API в
WinRT. Большинство из них - механические изменения (например,
замена `InitializeCriticalSection` для
`InitializeCriticalSectionEx` ). Я заключил эти
изменения в `#if WINAPI_FAMILY == WINAPI_FAMILY_APP` ,
чтобы он не повлиял на сборку без TARGET\_METRO.

Когда пришло время строить для ARM, я сделал запуск CMake и
использовал генератор Visual Studio 11 для создания нового проекта
(под каталогом с именем «ARM»), а затем начал вручную редактировать
результирующие файлы проекта.

**Основные изменения, которые вам необходимо
внести:**

* Change all 'Win32' to 'ARM' in all vcxproj files
(3rdparty\IlmImf includes filenames which contain 'Win32', be
careful to change those instances back)
* For all projects, add `true` to the Globals
propertygroup
* For the ZERO\_CHECK project, change ConfigurationType to
"DynamicLibrary" instead of "Utility" (as the Utility type will
fail to build)
* Add the following at the project level (for each project you
want to build for ARM):

```

  
    false
  
  <link>
    Console
    false
    false
  </link>

```
* Remove "/machine:X86 " from Link: Additional Options (if it is
in there)
* Remove gdi32.lib, winspool.lib, shell32.lib, and comdlg32.lib
from additional dependencies (these libs do not exist for ARM)



Отказ от ответственности: я на 100% новичок в OpenCV в качестве
библиотеки и только начал изучать это сегодня, когда нашел
некоторые примеры приложений, использующих OpenCV вокруг образцов
Azure Cognitive Vision.

Моя единственная цель состояла в том, чтобы даже увидеть,
поддерживается ли OpenCV в UWP и работает с ARM. Я прочитал кучу
сообщений и блогов, которые были вокруг с 2015 года, и они
заставляли меня думать, что работать не удалось.

Then I found this sample: <https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraOpenCV>

And can confirm it works for my basic test, you can see my video
here of ARM Pi 2 running UWP app, using the OpenCV library:
<https://twitter.com/LyalinDotCom/status/982830053355470848>

не говоря, что это означает, что все OpenCV будет работать, но
по крайней мере этот тест был хорошим знаком, и я хотел поделиться
своими ранними результатами здесь.



Мы работаем над тем, чтобы включить OpenCV с новой конструкцией
CMake в Phone and Store. Тем временем вы просмотрели [http://github.com/msopentech/openCV](https://github.com/msopentech/openCV) . У этого есть
инструкции по созданию OpenCV для WinRT.