Приведение OpenCV вектора <Point>.data к точке * приводит к неожиданному поведению - PullRequest
0 голосов
/ 03 октября 2018

В программе OpenCV C ++ у меня есть функция с этим телом.

  for (int ii=0; ii< static_cast<int>(parks.size()); ii++)
  {
     PolygonVertices temp = parks.at(ii).getPoly();
     const Point *pts = (const cv::Point*) Mat(parks.at(ii).getPoly()).data;
     int npts = Mat(parks.at(ii).getPoly()).rows;
     for (int jj=0; jj<npts; jj++)
     {
         cout<<"----"<<jj<<"----"<<endl;
         cout<<"x: "<<pts[jj].x<<", y: "<<pts[jj].y<<endl;
         cout<<"x: "<<temp[jj].x<<", y: "<<temp[jj].y<<endl;
         cout<<"--------"<<endl;
     }
  }
}

Polygonvertices - это тип, определенный как typedef std::vector<cv::Point>, а метод getPoly() возвращает такую ​​структуру.

Я передаю данные Polygonvertices (являющиеся вектором Point) на указатель типа Point.

Точки выбираются с помощью мыши.

Проблема заключается в том, что при печати координат x и y как элемента указателя, так и исходного элемента для первого элемента (индекс 0) данные, поступающие из указателя, сдвигаются.

Например,это вывод:

----0----
x: -1871319456, y: 21975
x: 286, y: 304
--------
----1----
x: 325, y: 218
x: 325, y: 218
--------
----2----
x: 375, y: 280
x: 375, y: 280

Как видите, первый элемент полностью смещен?

Что происходит?Является ли приведение неверным?

Это происходит с использованием OpenCV4 под Ubuntu 18.04.

...