2016-10-27 8 views
2

Я пытаюсь заполнить треугольник в маске, используя функцию fillConvexPoly. Но я получаю следующую ошибку.Функция OpenCV fillConvexPoly в исключении C++ throws

OpenCV Error: Assertion failed (points.checkVector(2, CV_32S) >= 0) in fillConvexPoly, file /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp, line 2256 
terminate called after throwing an instance of 'cv::Exception' 
what(): /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp:2256: error: (-215) points.checkVector(2, CV_32S) >= 0 in function fillConvexPoly 

я называю функцию, как это так,

cv::Mat mask = cv::Mat::zeros(r2.size(), CV_32FC3); 
cv::fillConvexPoly(mask, trOutCroppedInt, cv::Scalar(1.0, 1.0, 1.0), 16, 0); 

где trOutCroppedInt определяется как так,

std::vector<cv::Point> trOutCroppedInt 

И я нажимаю 3 очка в векторе,

[83, 46; 0, 48; 39, 0] 

Как исправить это erro р?

+0

Пожалуйста, отправьте сообщение [mcve]. Это работает безупречно для меня, возможно, у вас есть некоторые проблемы в коде, который вы не показываете – Miki

ответ

1

об ошибке points.checkVector (2, CV_32S)> = 0)

эта ошибка может произойти, когда тип данных является гораздо сложным, чем CV_32S и размерность больше двух. например, все данные типа vector<Point2f> делают эту проблему. поэтому мы можем использовать fillConvexpoly ниже шаги

1. Прочитайте изображение

cv::Mat src=cv::imread("what/ever/directory"); 

2. определения точек

мы должны определить наши точки, как показано на рисунке ниже enter image description here

поэтому наш код для этого пункта будет

vector<cv::Point> point; 
point.push_back(Point(183,146)); //point1 
point.push_back(Point(100,148)); //point2 
point.push_back(Point(100,110)); //point3 
point.push_back(Point(139,110)); //point4 

3.Use cv::fillConvexPoly функция

предположим, что наш образ src, и мы хотим, чтобы нарисовать многоугольник ((с до точек)) на этом изображении, то наш код будет

cv::fillConvexPoly(src,    //Image to be drawn on 
        point,     //C-Style array of points 
        Scalar(255,0,0), //Color , BGR form 
        CV_AA,    // connectedness, 4 or 8 
        0);   // Bits of radius to treat as fraction 

так выходного изображения, как показано ниже (перед: левая сторона - после правой стороны)

enter image description here

Смежные вопросы