Перейти к содержимому
Compvision.ru

DenisN03

Пользователи
  • Количество публикаций

    3
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О DenisN03

  • Звание
    Новичок
  1. Возникла необходимость подключить внешнюю usb камеру к android приложению и вывести изображение на экран смартфона. Кто нибудь занимался схожей задачей? Работаю в Android Studio 3. Проекты(https://github.com/openxc/android-webcam, https://github.com/theicfire/simplewebcam, https://github.com/saki4510t/UVCCamera) с github вылетают с ошибками.
  2. Я нашел функцию которая обрабатывает результат, но она для языка С++. Можете подсказать как ее преобразовать в Java? static void colorizeSegmentation(const Mat &score, Mat &segm) { const int rows = score.size[2]; const int cols = score.size[3]; const int chns = score.size[1]; Mat maxCl = Mat::zeros(rows, cols, CV_8UC1); Mat maxVal(rows, cols, CV_32FC1, score.data); for (int ch = 1; ch < chns; ch++) { for (int row = 0; row < rows; row++) { const float *ptrScore = score.ptr<float>(0, ch, row); uint8_t *ptrMaxCl = maxCl.ptr<uint8_t>(row); float *ptrMaxVal = maxVal.ptr<float>(row); for (int col = 0; col < cols; col++) { if (ptrScore[col] > ptrMaxVal[col]) { ptrMaxVal[col] = ptrScore[col]; ptrMaxCl[col] = (uchar)ch; } } } } segm.create(rows, cols, CV_8UC3); for (int row = 0; row < rows; row++) { const uchar *ptrMaxCl = maxCl.ptr<uchar>(row); Vec3b *ptrSegm = segm.ptr<Vec3b>(row); for (int col = 0; col < cols; col++) { ptrSegm[col] = colors[ptrMaxCl[col]]; } } }
  3. Создаю андроид программу которая с использованием opencv(dnn) загружает модель нейронной сети Enet и производит сегментацию входного изображения. Все идет гладко до обработки полученных результатов. На языке python обработка производится довольно просто - в цикле проходимся по матрице пикселей и в зависимости от значения присваиваем ему цвет. В java все не так: после работы возвращается объект типа Mat со следующими параметрами: res = Mat [ -1*-1*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x7f3e56fff160, dataAddr=0x7f3e44806000 ] res.total() = 1036800 res.channels() = 1 res.size() = 6x1 res.dims() = 4 res.cols() = -1 res.rows() = -1 Более того если все таки достать(http://answers.opencv.org/question/175676/javaandroid-access-4-dim-mat-planes/) значения пикселей из полученного результата то они не соответствуют ожиданиям. Т.е. каждому классу соответствует число например если 5 классов то возвращаются числа от 0 до 4(так работает на python). Здесь же мне возвращаются числа вида: -26.287221908569336, -14.588539123535156, -7.386473655700684, 1.4765703678131104, 15.550891876220703. Кто нибудь знает как преодолеть данную проблему? Почему объект Mat возвращает не те значения?
×