Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Yesterday
  2. Расчёт дистанции до объекта

    А можете привести схему эксперимента? Как установлены камеры, расположение и размеры объекта. А то вы привели результат работы алгоритма, а что должно быть мы не знаем. Может быть еще минимальный запускаемый кусок кода с тестовым изображением для пощупать проблему.
  3. Last week
  4. Добрый день! У меня возникли вопросы при расчёте дистанции до объекта по двум камерам в OpenCV. Калибровку камер выполнил в Matlab Stereo Camera Calibrator App (в OpenCV возникли проблемы) и затем сохранил параметры в формате OpenCV с помощью: https://github.com/JinyongJeong/StereoCalibration_matlab2opencv Получил матрицы: R1, R2, P1, P2, Q, R, T, M1, M2, D1, D2. При использовании алгоритма: https://github.com/mixr26/stereo_vision cv::Rect RectLeft=cv::Rect(1190,960,550,450); //Объект на левом кадре cv::Rect RectRight=cv::Rect(790,960,550,450); //Объект на правом кадре cv::Point3f P3f(RectLeft.x, RectRight.y, abs(RectLeft.x - RectRight.x)); std::vector<cv::Point3f> input; std::vector<cv::Point3f> output; input.push_back(P3f); //X, Y and Z coordinates of a real-world object cv::perspectiveTransform(input, output, Q); std::cout << output[0] <<std::endl; получаю значение X, Y, Z [-2.04382, 0.548109, 9.06563] – Не совсем понятно, как перевести эти значения в метры. При использовании другого алгоритма, в котором рассчитывается карта глубины, получаю некорректные значения дистанции (в то числе, отрицательные). cv::Mat img1 = cv::imread("left_12.bmp", 1); cv::Mat img2 = cv::imread("right_12.bmp", 1); Size img_size = img1.size(); Ptr<StereoSGBM> sgbm = StereoSGBM::create(0,16,3); int numberOfDisparities = 64; //известно cv::Mat M1, D1, M2 D2 Q R1, R2, P1, P2, R, T; //устраняем дисторсию Mat img1r, img2r; cv::undistort(img1, img1r, M1, D1); cv::undistort(img2, img2r, M2, D2); img1 = img1r; img2 = img2r; numberOfDisparities = numberOfDisparities > 0 ? numberOfDisparities : ((img_size.width/8) + 15) & -16; sgbm->setPreFilterCap(63); int sgbmWinSize = 3; sgbm->setBlockSize(sgbmWinSize); int cn = img1.channels(); sgbm->setP1(8*cn*sgbmWinSize*sgbmWinSize); sgbm->setP2(32*cn*sgbmWinSize*sgbmWinSize); sgbm->setMinDisparity(0); sgbm->setNumDisparities(numberOfDisparities); sgbm->setUniquenessRatio(10); sgbm->setSpeckleWindowSize(100); sgbm->setSpeckleRange(32); sgbm->setDisp12MaxDiff(1); Mat disp, disp8, disp32; sgbm->compute(img1, img2, disp); // compute the real-world distance [mm] //distance = (baseline * focal length) / disparity //Q (output from stereoRectify). Q[2][3] = focal length, 1/Q[3][2] = baseline. float fMaxDistance = static_cast<float>((1. / Q.at<double>(3, 2)) * Q.at<double>(2, 3)); disp.convertTo(disp32, CV_32F); auto outputDisparityValue = disp32.at<float>(1200,1200); // DISP_SCALE = 16 float fDisparity = outputDisparityValue / cv::StereoMatcher::DISP_SCALE; float fDistance = fMaxDistance / fDisparity; std::cout << "Distance = " <<fDistance <<std::endl; В чём может быть проблема?
  5. Сдается мне , почти ваша задача здесь: https://github.com/jahaniam/Real-time-Video-Mosaic
  6. У меня под виндой обычно установлен k lite codec pack и его, как правило, хватает на все случаи жизни.
  7. а что CVAT уже устарел?
  8. Earlier
  9. На Питоне вряд ли, зачем на нём делать? Но это всё просто, сам можешь сделать
  10. Тогда и правда лучше проверь версии поновей, они с ffmpeg хорошо дружат. Ну и сам ffmpeg из командной строки можешь проверить - умеет ли он h.264
  11. Не заработал.. пробовал выбрать выходные форматы: .mkv и .avi Первый даже файл не создался., второй 0 байт
  12. А есть где реализация этого фильтра на Python? Найти нигде не могу
  13. Кажется, что на сшитом уже ничего особо не сделаешь - раньше надо было делать то, что используется в stitching методах. А тут разве что классический deblocking может зайти, чтобы не попортить информацию. Debloking - это просто фильтр вдоль границ склейки по сути.
  14. Пробовал выставлять в настройках H.264 +avi; H.264 + mkv, H.264 + mp4 , но почему-то не одна из этих связок кодек+формат не захотела записывать файл . Для H.264 нужно специальные кодеки на ПК ставить или этот кодек как MJPG по умолчанию в винде есть? Может есть какие либо более достойные альтернативы VideoWriter? Больно уж этот класс скудный , может конечно в более свежих сборках OpenCV его допилили и доработали, но я использую версию 2.4.1 и как то совсем не весело., особенно огорчил метод VideoWriter::release(); С многопоточностью он походу дружит слабо, либо вообще не дружит.. при запуске в boost::thread метод показал крайне не стабильную работу через раз записывал файл, вызывал завершение программы, пришлось синхронизировать потоки и танцевать с mutex
  15. Думается H.264 или H.265 должны жать по максимуму, но вряд ли сильно плотнее чем mpeg4 или divX..
  16. Репа бинарников: https://www.tensorflow.org/install/lang_c
  17. Добрый день! Коллеги, подскажите пожалуйста при помощи каких codec можно уменьшить размер выходного видео файла? Задача получить минимальный размер при сохранении среднего качества картинки получаемой с Web камеры. Перепробовал различные комбинации кодеков/выходного формата: 'M', 'J', 'P', 'G' / .avi , 'M', 'P, '4', 'V' / .mp4 , 'D', 'I', 'V', 'X' / .avi , 'A', 'V', 'C', '1' / .avi . На данный момент 30 минут видео с 10 FPS весит > 1GB, в идеале хотелось бы добиться 200-300 мбайт. Вот код функции с помощью которого пишу видео файл с web камеры: int fcc = CV_FOURCC('M', 'J', 'P', 'G'); int fps = 25; string filelocation = "С:\\video.avi"; cv::Size frameSize(videoCapture.get(CV_CAP_PROP_FRAME_WIDTH), videoCapture.get(CV_CAP_PROP_FRAME_HEIGHT)); VideoWriter testwriter(filelocation, fcc, fps, cv::Size(640,480), true); while (true) { cv::Mat writefrm; //Get frame from webcam videoCapture >> writefrm; }
  18. Наткнулся на проект по теме, детектор Vanishing Point (python ): https://github.com/rayryeng/XiaohuLuVPDetection
  19. Подскажите,как с помощью Python убрать швы на изображении? А то сильно видно,что изображение составлено из более мелких. Спасибо
  20. Кажется, что на представленном рисунке не CLAHE, а простой equalizeHist. Только лучше с этим поэкспериментировать. Минимум это: RGB изображение -> split по каналам -> equalizeHist для каждого канала -> merge. Но возможно, что лучше сработает перевод картинки в другое цветовое пространство, например HSV, а там делать эквализацию не для всех каналов, а только для насыщенности. Или для насыщенности и яркости. Короче, надо экспериментировать. Но и CLAHE может зайти, потому что эквализация - это довольно жёсткое преобразование и может сильно исказить (зато без потери информации).
  21. А как можно такое изображение сделать цветным? пробовал через cv.createCLAHE(). Но не получилось. Сорри, если задаю глупые вопросы,но пока в OpenCV у меня немного опыта)
  22. В OpenCV в модуле opencv_stitching для этого есть класс ExposureCompensator. Лучше изучи, как работает пример stitching_detailed. Там весь пайплайн сшивки панорамы и все необходимые кусочки есть.
  23. Добрый день! Есть набор изображений с разной степенью яркости. Два из них привожу для примера. Третий файл - это блендинг двух изображений, где разница яркости отчетливо видна. Как усреднить яркость,чтобы они были более менее одинаковы? Спасибо
  24. Возможно человеку нужно вычислить оптический поток и поворот камеры относительно предыдущих снимков по z? Выделить особые точки на соседних снимках и применить cv2.estimateRigidTransform(src, dst, fullAffine)
  25. Кажется, что лучшее решение - это всё таки 3D реконструкция, например smf. Скормите ему все свои картинки и получите координаты камеры в 3D для каждого снимка.
  26. это можно, но тогда на изображениях должна быть одна и та же картинка, отличающаяся только поворотом, ну может немного смещенная. Короче, если взяв эти деве картинки вы на глаз можете определить поворот, то и комп сможет, если нет, то нет.
  27. А если взять опорное изображение,где камера имеет нулевые углы, и сравнивать это изображение со всеми остальными функцией 'imreg.similarity'? Тогда будет давать угол между изображениями
  1. Load more activity
×