Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Today
  2. Yesterday
  3. Last week
  4. Earlier
  5. Можно сделать проще. Выделить линией где человек и считать количество раз сколько он её пересек. К примеру по поясу. Встал есть пересечение сел нету. Насколько слышал именно так и делают.
  6. Можно применить автокорреляцию, не обязательно на сырых изображений. Можно предварительно прогнать через что ни будь типа OpenPose. По автокорреляции прикинуть полный период. А дальше выделить фазы. Ну и по вашему плану.
  7. Добрый день, уважаемые форумчане. Есть задача считать повторяющиеся движения в видеопотоке. Например человек приседает.. или отжимается.. ну или машет рукой "Пака!!". Я почему-то решил обучить для этого сеть(не исключено, что это ошибка и есть способы получше). Подскажите плз в какую сторону копать? То что я видел в гугле сводится к подсчету каких -либо попугаев на картинке(т.е. их наличие и количество). Как это обобщить на видео не понятно. Должно фиксироваться ведь движение целиком.. Есть вот идея обучить распознавать к примеру несколько положений и скармливать кадры сети и фиксировать обнаружение какого-либо положения - потом переходить к следующему, останется только задать правильную последловательность распознавания..Но чесно говоря.. это нужно разбить движение на фазы.. для каждой фазы нужна своя выборка и т.д. Чот смахивает на неоптимальность.. Может есть лучшие предложения?? Премного благодарен.
  8. А стандартный пример из исходников OpenCV пробовали ? https://github.com/opencv/opencv/blob/master/samples/cpp/calibration.cpp
  9. Пытаюсь калибровать камеру на предмет дисторсии по вот этому мануалу https://docs.opencv.org/4.3.0/d4/d94/tutorial_camera_calibration.html Когда использовал шахматный эталон - всё было ок, пока он был целиком в кадре, но висло намертво, когда часть эталона оказывалась вне кадра, пытаюсь сделать с кругами, пишут вроде что алгоритм более устойчивый, но он просто не находит цель, если не уменьшать размер изображения (примерно до 1024*768). Шаблон генерил с помощью скриптов OpenCV, пытался и симметричный и асимметричный использовать. Можно ли что-то сделать, чтобы нормально находить эталон на большом кадре? Или надо сильно уменьшать изображение, находить цель, потом брать базовое изображение, умножать все найденные координаты на коэффициент, с которым уменьшали изображение и запускать findCornersSubPix? Асимметричный эталон использовал вот этот Код вот такой: cv::Size boardSize( 4, 11 ); cv::Mat image = cv::imdecode( cv::Mat( 1, data->size(), CV_8UC1, data->data() ), cv::IMREAD_COLOR ); std::vector< cv::Point2f > pointBuf; bool found; // int chessBoardFlags = cv::CALIB_CB_ADAPTIVE_THRESH | cv::CALIB_CB_NORMALIZE_IMAGE | cv::CALIB_CB_FAST_CHECK; qDebug()«"Looking for corners"; // found = findChessboardCorners( image, boardSize, pointBuf, chessBoardFlags); //found = findCirclesGrid( image, boardSize, pointBuf ); found = findCirclesGrid( image, boardSize, pointBuf, cv::CALIB_CB_ASYMMETRIC_GRID);
  10. Если только смещение, без поворота то попробуйте, phaseCorrelate() . Можно еще вырезать шаблон и использовать templateMatching, Есть и более продвинутые способы, например : https://www.sicara.ai/blog/2019-07-16-image-registration-deep-learning
  11. Все изображения одинакового размера. Сделал так: на каждом изображении выбрал одну точку и посчитал смещение. Далее создал пустое изображение (numpy матрица с n каналов). И в эту пустую матрицу накидал изображений с учетом смещения. Все получилось. Вопрос: Я точку, чтобы посчитать смещение, на каждом изображении выбираю вручную. Можно ли как-то смещение найти автоматизированно?
  12. Если изображения трансформированы сдвигом, масштабом и поворотом, можно попробовать estimateRigidTransform . Если только смещение, без поворота то, как альтернатива - phaseCorrelate() . Для того чтобы np.stack работала, изображения должны быть одинакового размера и типа, то есть придется их как-то привести к стандартному формату. Вначале посчитать среднее смещение, и принять эту точку за начало отсчета, затем создать пустое изображение для каждого слоя и вклеить в них со смещением, поворотом исходные изображения. Можно использовать warpAffine (попробовать можно здесь.
  13. Именно этого и добиваюсь. Я работаю с многослойными изображениями (мульти, гипер спектр). Сейчас я одноканальные изображения "накладываю" друг на друга без учета сдвига. Это не очень хорошо. Вот как этот сдвиг устранить? И, кстати, не только 6 слойное. Я и 13 слойное делал.
  14. А что должно получиться ? Насколько я помню, stack сделает 6 слойное изображение. Вы этого добиваетесь? Или нужно просто визуальное наложение с прозрачностью ?
  15. Доброго времени суток, товарищи! Имеются изображения. Не могу приложить к теме, позволяет только 80кб файл. Их нужно наложить одно на другое. Но они со "сдвигом". Как правильно их наложить, учитывая сдвиг? Чтоб всё совпало Накладываю изображения с помощью функции numpy.stack() Благодарю!
  16. Я использую opencv.js и в try-catch блоке иногда ловится ошибка не в виде текста, а в виде одного числа без комментариев, например, 6586736. Числа в рзаных случаях разные. Что это значит?
  17. Спасибо за советы. Получилось!
  18. Я на шарпе не пишу, на C++ это было бы так, конвертировать матрицы в тип float при помощи convertTo, затем просто суммировать S=S+m и в конце разделить на количество кадров S=S/n. Или применить addWeighted beta = ( 1.0 - alpha ); addWeighted( src1, alpha, src2, beta, 0.0, dst); alpha в вашем случае 1/n src2=dst , src1 - новое изображение с камеры. dst - буфер где будет вычисляться среднее.
  19. Спасибо. Не очень понятен метод AddWeighted. Может быть, есть примеры суммирования n-изображений?
  20. Классически делается при помощи взвешенной суммы addWeigted с коэффициентом 1/n , где n - количество усредняемых кадров. Можно использовать как усреднение в видеопотоке. Описание тут: http://www.emgu.com/wiki/files/3.1.0/document/html/180ae243-ff3c-f59c-7e3a-a8e474583e8e.htm
  21. Как можно сделать усреднение n-кадров видеопотока (EmguCV)? Есть простая идея. Как правильно суммировать? int n = 10; Mat img_sum = new Mat(); Mat img_m = new Mat(); for (int i = 1; i <= 10; ++i) { capture.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.PosFrames, i); capture.Read(m); //нужно подсчитать сумму } img_m = img_sum / n;
  22. Премного благодарен, уважаемый, получилось выровнить изображение.
  23. @Smorodov, премного благодарен. Как я понял, параметры dy, dx - разность координат точек отрезка (линии) ?
  24. Ну если знаем 2 точки то alpha=atan2(dy,dx)
  25. Прописал вот такой код: var lines = Cv2.HoughLinesP(thresh_img, 1, Math.PI / 180, 200, 150, 30); LineSegmentPoint max_line = new LineSegmentPoint(); for (int i = 0; i < lines.Length; i++) { // получаем максимальную длинную прямую if (lines[i].Length() > max_line.Length()) { max_line = lines[i]; } Cv2.Line(original_img, lines[i].P1, lines[i].P2, new Scalar(0, 0, 250), 2); } // выводим линию максимальной длины Cv2.Line(original_img, max_line.P1, max_line.P2, new Scalar(255, 0, 0), 3); отображает вот в таком виде (синяя линия - это максимально прямая линия) Как теперь определить угол поворота по синей линии ? Это необходимо для выравнивания скана документа. Как я понял, угол можно получить с помощью HoughLines(), можно ли как-то получит угол по LineSegmentPoint ?
  26. Да, спасибо, я уже понял методом "тыка" что представляют эти методы Хорошо, попробую. Просто я линии, которые нашел с помощью HoughLines(), выводил на оригинал изображения. С вашим примером обязательно попробую.
  27. Коррекция кадров видео

    Спасибо. Нашёл
  28. Коррекция кадров видео

    Большое спасибо. Совсем даже не поздно. У нас всё очень неспешно происходит... Но не совсем понял, по какой книге это сделано, вроде ссылка на книгу есть, но что-то не переходит...
  1. Load more activity
×