Форум программистов, компьютерный форум CyberForum.ru

OpenCV определить координаты точки по матрице преобразований - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Во введенном слове подсчитать количество различных пар букв http://www.cyberforum.ru/cpp-beginners/thread1762707.html
Во введенном слове подсчитать количество различных пар букв. Например, в слове babacabacd 5 различных пар букв, ba – 3 пары, ac – 2 пары. Написать и протестировать функцию compress(), которая сжимает массив, удаляя из него элементы равные числу, введенному с клавиатуры.
C++ Определить количество строк матрицы, не содержащих ни одного нулевого элемента Ввести с клавиатуры вещественную матрицу размерностью 5х5. Определить количество строк, не содержащих ни одного нулевого элемента. помогите пж http://www.cyberforum.ru/cpp-beginners/thread1762702.html
Строка, хранящая путь к файлу C++
string upgrade(string name) { return "C:\Users\Имя пользователя\Desktop\" + name + ".txt"; } Компилятор ругается. Почему?
Получить элементы квадратной матрицы C++
Получить элементы данной квадратной матрицы А, из нее по заданному правилу получить компоненты вектора D, вычислить значения величины В по элементам вектора D. С++ Полную формулировку прикрепила документом.
C++ Как задать орграф структурой? http://www.cyberforum.ru/cpp-beginners/thread1762649.html
Вот у меня есть структура typedef struct node { struct node *t; unsigned char clr; } NODE; я выделяю для неё память graf=(NODE*)malloc(sizeof(NODE)*(количество вершин)); и мне надо чтобы указатель t указывал на вершины
C++ Найти сумму трех чисел Даны трехзначные числа(чтоб цифры в этих числах были разные) , ввод а(сумма чисел) подробнее

Показать сообщение отдельно
GVA_
0 / 0 / 0
Регистрация: 21.04.2016
Сообщений: 5
14.06.2016, 16:09     OpenCV определить координаты точки по матрице преобразований
Проблема в следующем: есть картинка полученная с камеры, точнее видеопоток по отдельным картинкам. На картинке определенная область (квадрат или прямоугольник) и внутри области есть точка, координаты которой меня интересуют.
Задача получить координаты точки относительно заданной области.
Я ее решаю следующим образом: в openCV преобразую картинку в однобитную, затем используя исходную картинку и координаты вершин области, делаю корректировку перспективных искажений по матрице преобразований, в результате чего получаю еще одну картинку, с откорректированной перспективой, т.е. реальный квадрат, либо прямоугольник и уже на нем нахожу координаты искомой точки. Программа работает, только перспективные преобразования и получение откорректированной картинки занимает определенной время, в результате на видео заметны задержки.
По сути мне вся откорректированная картинка не нужна, ведь для ее получения при разрешении 640*480 пересчитываются координаты 300к точек, а надо получить координаты только одной точки зная ее координаты на исходном изображении и матрицу преобразований. Если кто знает как это сделать подскажите пожалуйста. Вот кусок кода как я это делаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
        
                // точки для матрицы преобразования перспективы
        CvPoint2D32f srcQuad[4], dstQuad[4];
 
        // матрица преобразования
        CvMat* warp_matrix = cvCreateMat(3, 3, CV_32FC1);
 
        // клонируем картинку
        dst = cvCloneImage(src);
 
        // задаём точки
        src[0].x = config[0];                             // координаты вершин области Top left 
        src[0].y = config[1];
        src[1].x = config[2];                            // Top right
        src[1].y = config[3];
        src[2].x = config[4];                             // Bottom left
        src[2].y = config[5];
        src[3].x = config[6];                    // Bottom right
        src[3].y = config[7];
        //- - - - - - - - - - - - - -//
        dstQuad[0].x = 0;                //Координаты вершин после коррекции dst Top left
        dstQuad[0].y = 0;
        dstQuad[1].x = src->width;           //dst Top right
        dstQuad[1].y = 0;
        dstQuad[2].x = 0;                //dst Bottom left
        dstQuad[2].y = src->height;
        dstQuad[3].x = src->width;           //dst Bottom right
        dstQuad[3].y = src->height;
 
        // получаем матрицу преобразования
        cvGetPerspectiveTransform(srcQuad, dstQuad, warp_matrix);
        // преобразование перспективы
        cvWarpPerspective(src, dst, warp_matrix);
 
        // показываем
        cvNamedWindow("cvWarpPerspective", 1);
        cvShowImage("cvWarpPerspective", dst);
 
        
        // находим координаты точки
        int x = 0;
        int y = 0;
        int Xc = 0;
        int Yc = 0;
        
 
        // пробегаемся по пикселям изображения
        for (int y = 0; y<dst->height; y++)
        {
            uchar* ptr = (uchar*)(dst->imageData + y * dst->widthStep);
            for (int x = 0; x<dst->width; x++)
            {
                if (ptr[x]>0)
                {
                    Xc = x;
                    Yc = y;
                }
            }
        }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru