Стоит задача: воспользоваться функциями библиотеки компьютерного зрения в приложениях под bada SDK. Скажу, что над этой задачей я бился где-то с недельку, и прямо сейчас кайфую от достигнутого результата :) Приятное ощущение для программиста, не правда ли?!
Так вот. Я раскрою детали своего решения, чтобы обломать вам вашу возможность тоже заполучить такой кайф :) Не обессудьте ;)
Для начала нам надо
разобраться, что нужно для решения задачи. Подразумевается, что вы уже установили bada SDK и имеете некоторый опыт общения с ней, чтобы я тут не заострял внимание на мелочах. Дальше, нужна сама библиотека OpenCV. Ее можно скачать отсюда. Качаете архив с исходниками (никаких *-win32-vs2008.zip).
Все ниже изложенное будет касаться версии 2.1.0Скачивать исходники нужно для того, чтобы получить бинарники, заточенные под платформу bada. Это важный момент! О том, как получить такие бинарники, написан отдельный пост.
Когда бинарники получены (*.lib и *.dll), делаем следующее: либы нужны для линковки и их прописываем в свойствах проекта (Project > Properties > C/C++ Build > Settings > вкладка Tool Settings > bada C++ Linker > Libraries). DLL-ки должны быть доступны через переменную среды PATH.
Если при запуске, симулятор вылетает в самом начале без каких-либо ошибок — 99% вероятность того, что проблема именно в недоступности DLL. Этот совет стоил мне нескольких дней мытарств.Не забудьте также, в свойствах проекта (Project > Properties > C/C++ Build > Settings > вкладка Tool Settings > bada C++ Compiler > Directories), указать путь до инклудов рассматриваемой библиотеки.
Теперь все готово к работе. Дальше я поведаю о том, как работать с изображениями в среде bada. Следующий кусочек кода, несмотря на его простоту, дался мне большим количеством экспериментов.
#include <cv.h>
void TestingOpenCV()
{
String path(L"/Home/test.jpg");
Image image;
image.Construct();
Bitmap *pBitmap = image.DecodeN(path, BITMAP_PIXEL_FORMAT_RGB565);
BufferInfo bufferInfo;
result r = pBitmap->Lock(bufferInfo);
if (r == E_SUCCESS) {
Decode(bufferInfo);
pBitmap->Unlock();
}
}
По коду, мы декодируем изображение в битмап. bada SDK поддерживает три формата, RGB565 среди которых наиболее удобоваримый. Чтобы работать с пикселями напрямую, необходимо вызвать Lock() и получить буфер данных. Далее идет функция конвертации в формат OpenCV.void Decode(BufferInfo& bufferInfo)
{
cv::Mat mat(bufferInfo.height, bufferInfo.width, CV_8UC2, bufferInfo.pPixels);
cv::Mat image;
cv::cvtColor(mat, image, CV_BGR5652BGR);
// continue working with *image* - native OpenCV format
}
Обратите внимание, что мы имитируем двухканальный 8-битный формат, хотя на самом деле изображение 16-битное и с 3 каналами. В этом вся магия! Ну, а дальше выполняем преобразование в обычный формат RGB and keep going! Переменная image — решение поставленной задачи.

