У меня есть список контуров для рисования. Некоторые из этих контуров пересекаются.OpenCV drawContours странное поведение
Когда я хочу нарисовать их с помощью OpenCV, я просто использую функцию cv::drawContours
.
Однако поведение довольно странное.
Вот цитата из официального documentation
C++: void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point())
Parameters:
contourIdx – Parameter indicating a contour to draw. If it is negative, all the contours are drawn.
Так, из документации, если я хочу сделать все мои участки, заполненные черным цветом, я просто должен сделать:
cv::drawContours(this->mask.raw,
this->areas, -1,
cv::Scalar(0,0,0),
cv::FILLED);
Однако, это дает мне поток вывода:
Здесь мы можем ясно видеть, что все мои области НЕ заполнены черным.
Но если цикл по моему списку областей и вызвать cv::drawContours
для каждой области:
unsigned int i = 0;
for (const auto& area : this->areas)
cv::drawContours(this->mask.raw,
this->areas, i++,
cv::Scalar(0,0,0),
cv::FILLED);
я получил хороший вывод, который довольно сильно отличается от первого:
Have Я что-то пропустил из документации? Может ли кто-нибудь объяснить мне поведение cv::drawContours
и каково другое - назвать его одним для всех областей и называть его каждый раз для каждой области?