Рисование полигонов в OpenCV? - PullRequest
6 голосов
/ 27 ноября 2011

Что я здесь не так делаю?

vector <vector<Point> > contourElement;

for (int counter = 0; counter < contours -> size (); counter ++)
{   
    contourElement.push_back (contours -> at (counter));

    const Point *elementPoints [1] = {contourElement.at (0)};
    int numberOfPoints [] = {contourElement.at (0).size ()};

    fillPoly (contourMask, elementPoints, numberOfPoints, 1, Scalar (0, 0, 0), 8);

Я получаю сообщение об ошибке в части const Point.Компилятор говорит

error: cannot convert 'std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >' to 'const cv::Point*' in initialization

Что я делаю не так?(PS: очевидно, игнорировать пропущенную скобку в конце цикла for, потому что это только часть моего кода)

Ответы [ 3 ]

13 голосов
/ 27 ноября 2011

Давайте проанализируем неправильную строку:

const Point *elementPoints [1] = { contourElement.at(0) };

Вы объявили contourElement как vector <vector<Point> >, что означает, что contourElement.at(0) возвращает vector<Point>, а не const cv::Point*.Итак, это первая ошибка.

В конце вам нужно сделать что-то вроде:

vector<Point> tmp = contourElement.at(0);
const Point* elementPoints[1] = { &tmp[0] };
int numberOfPoints = (int)tmp.size();

Позже, назовите это как:

fillPoly (contourMask, elementPoints, &numberOfPoints, 1, Scalar (0, 0, 0), 8);
13 голосов
/ 07 августа 2013

Только для записи (и поскольку документ opencv здесь очень скуден) более сокращенный фрагмент кода с использованием API c ++:

  std::vector<cv::Point> fillContSingle;
  [...]
  //add all points of the contour to the vector
  fillContSingle.push_back(cv::Point(x_coord,y_coord));
  [...]

  std::vector<std::vector<cv::Point> > fillContAll;
  //fill the single contour 
  //(one could add multiple other similar contours to the vector)
  fillContAll.push_back(fillContSingle);
  cv::fillPoly( image, fillContAll, cv::Scalar(128));
2 голосов
/ 27 ноября 2011

contourElement - это вектор vector<Point>, а не Point :) так вместо:

const Point *elementPoints

положить

const vector<Point> *elementPoints
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...