Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/88: Рейтинг темы: голосов - 88, средняя оценка - 4.99
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 210

Узнать сдвиг конкретных пикселей из матрицы сдвига, выдаваемой initUndistortRectifyMap

24.09.2020, 15:25. Показов 17391. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть матрицы сдвига со значениями для remap, полученные в результате работы initUndistortRectifyMap.
Как из них извлечь реальный сдвиг пикселей края изображения для каждой строки пикселей?
Т.е. точка p1(x, y) переходит в p2(x', y') — и надо узнать координаты (x', y').

Код:
C++
1
2
3
4
5
6
7
8
9
10
FileStorage fs("maps.yml", FileStorage::READ);
if (fs.isOpened())
{
    Mat undistorted, map1, map2, image;
    fs["map1"] >> map1;
    fs["map2"] >> map2;
    image = imread("c/c1.jpg");
    remap(image, undistorted, map1, map2, cv::INTER_LINEAR);
    // как извлечь значения из map1 для левой/правой граней изображения c1.jpg?
}
Добавлено через 1 час 51 минуту
Матрицы cameraMatrix и distCoeffs тоже имеются, если это нужно:
C++
1
2
3
4
5
6
7
8
cv::initUndistortRectifyMap(
    cameraMatrix,  // computed camera matrix
    distCoeffs,       // computed distortion matrix
    cv::Mat(),        // optional rectification (none) 
    cv::Mat(),       // camera matrix to generate undistorted
    cv::Size(640, 480), // size of undistorted
    CV_32FC1,      // type of output map
    map1, map2); // the x and y mapping functions
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2020, 15:25
Ответы с готовыми решениями:

Сдвиг (Shift), регистры сдвига и т.п
Товарищи, есть ли какие-либо книги\мануалы по практической реализации сдвигов и регистров? Банально не могу понять их предназначение...

Сдвиг пикселей на сенсорном мониторе 12" KVT
По поиску похожей проблемы не нашел, подскажите! С левой стороны экрана 2 см от края полоса вертикально смещена вверх на 1 пиксель. Т.е....

Если есть битовый сдвиг почему нету байтового сдвига?
Реально ли реализовать байтовый сдвиг, который будет подобен битовому сдвигу, и будет быстрее работать чем копипаст через цикл?

7
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
28.09.2020, 18:45
Лучший ответ Сообщение было отмечено Монтгомери как решение

Решение

функция undistortPoints() не пойдет?
1
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 210
29.09.2020, 01:54  [ТС]
u235, я правильно понял, что она делает то же, что и initUndistortRectifyMap + remap, только не для всего изображения, а для отдельных точек? Соответственно, можно связать изначальную и искажённую точки?
Если так — то да, должно подойти.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
29.09.2020, 07:34
Монтгомери, да, я так понял из документации. Вы можете для себя проверить, на каком-либо тестовом примере, это то что вам нужно или нет.
0
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 210
29.09.2020, 14:21  [ТС]
u235, попробовал — получается какая-то ерунда.
Взял точку (0, 240), после remap она должна пероеходить в (12, 206) — я её отрисовал зелёным и вручную проверил, куда она смещается.
Запускаю код:
C++
1
2
3
4
5
6
std::vector<cv::Point2f> in;
std::vector<cv::Point2f> out;
in.push_back(cv::Point2f(0, image.rows / 2));
cout << "before: " << in[0] << std::endl;
undistortPoints(in, out, cameraMatrix, distCoeffs);
cout << "after: " << out[0] << std::endl;
А на выходе совсем не то, что я ожидал:
before: [0, 240]
after: [-0.426421, -0.0465764]
0
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 210
29.09.2020, 14:33  [ТС]
Я заметил очень странную вещь: оказывается remap и undistort дают разные результаты при прочих равных.
В частности, при undistort точка (0, 240) почему-то переходит в (5, 240).
Слева remap, справа undistort:
Миниатюры
Узнать сдвиг конкретных пикселей из матрицы сдвига, выдаваемой initUndistortRectifyMap   Узнать сдвиг конкретных пикселей из матрицы сдвига, выдаваемой initUndistortRectifyMap  
0
 Аватар для Decosa
174 / 66 / 21
Регистрация: 06.07.2017
Сообщений: 353
19.10.2020, 22:11
Возможно не все вижу, но на взгляд (ИМХО) оба снимка практически не имеют отличий. За исключением освещенности..
0
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 210
20.10.2020, 10:04  [ТС]
Decosa, правое занимет весь экран, на левом снизу чёрная полоса.
И освещённость там одна. Просто из-за того, что изображение на левом меньше, он может казаться темнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.10.2020, 10:04
Помогаю со студенческими работами здесь

Написать триггер для Button, который запустит анимацию сдвига Button на 100 пикселей за 2 секунды
Пожалуйста, помогите. Написать триггер для Button, который запустит анимацию сдвига Button на 100 пикселей за 2 секунды.

Осуществить циклический сдвиг массива на N элементов. Направление сдвига указывает пользователь
Осуществить циклический сдвиг массива на N элементов. Направление сдвига указывает пользователь (например, массив 0,1,2,3,4,5,6,7,8,9 при...

Узнать, сколько пикселей занято канвой
Помогите решить задачку. На Форме падают фигуры и рысуют около себя элипсы, нужно узнать сколько пикселей зарисованно конвой и сколько...

MS VC++ 6.0:Как "подавить" выдачу конкретных варнингов в конкретных местах?
Не хочу, чтобы выдавались конкретные варнинги, относящиеся к определённым областям заданных файлов. Как это сделать. Про...

Разобрать код сдвига строки матрицы
Она сдвигает строки массива на k вниз. Но как это происходит в коде, не могу понять. void sdvig(float **mas, int N, int M,int k) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru