В OpenCV при создании cv :: Rect2i из cv :: Rect2f библиотека просто округляет каждый компонент cv :: Rect2f, то есть x, y, ширину, высоту. Это вызывает дыры и наложения при преобразовании набора прямоугольников подразделения, например, интервалы 0,4..1,6 и 1,6..3,2 будут округлены до 0..1 и 2..4, в то время как желаемое целочисленное подразделение будет 0 .. 2 и 2..3, т.е. каждый подынтервал включает в себя те целые пиксели, центры которых l ie с соответствующим интервалом с плавающей запятой.
Теперь я использую следующую функцию «велосипед» для решения задачи:
cv::Rect2i integer_rect(const cv::Rect2f & rect)
{
int x1 = std::floor(rect.x + 0.5f);
int y1 = std::floor(rect.y + 0.5f);
int x2 = std::floor(rect.x + rect.width + 0.5f);
int y2 = std::floor(rect.y + rect.height + 0.5f);
return cv::Rect2i(x1, y1, x2 - x1, y2 - y1);
}
Содержит ли OpenCV уже такую функцию преобразования, которую я мог бы пропустить?