我想从Point2f点的向量中找到矩形的四个角。
这些点将是具有各自值的max和min x值,其他两个角将是具有各自y值的max y值。
到目前为止,我找到了x和y的最大值和最小值。我试图弄清楚如何使这些最大值与它们的其他值重新组合,所以我有四个x,y点。这可能吗?
编辑:矩形相对于图片视图成一定角度。
这是我目前的代码,并且运行良好:
vector<cv::KeyPoint> keypoints;
blob_detector->detect(backproj_dilate, keypoints);
vector<Point2f> XY;
for (size_t i=0; i<keypoints.size(); i++){
XY.push_back(keypoints[i].pt);
}
float X, Y;
float maxX= 0;
float minX = 10000;
float maxY= 0;
float minY = 10000;
for(size_t i=0; i<keypoints.size(); i++){
X = XY[i].x;
Y = XY[i].y;
if( X > maxX){
maxX = X;
}
if( X < minX){
minX = X;
}
if( Y > maxY){
maxY = Y;
}
if( Y < minY){
minY = Y;
}
}
除了您当前的结构,例如:
struct vector2 { float x, y; };
struct key_point { vector2 pt; };
您可能拥有一个包含所有四个角的矩形结构:
struct rect {
vector2 top_left;
vector2 top_right;
vector2 bottom_left;
vector2 bottom_right;
};
然后您可以使用以下命令填充它们:
std::vector<key_point> key_points;
auto x_comparator = [](auto const& a, auto const& b) { return a.pt.x < b.pt.x; };
auto y_comparator = [](auto const& a, auto const& b) { return a.pt.x < b.pt.x; };
float max_x = boost::max_element(key_points, x_comparator)->pt.x;
float min_x = boost::min_element(key_points, x_comparator)->pt.x;
float max_y = boost::max_element(key_points, y_comparator)->pt.y;
float min_y = boost::min_element(key_points, y_comparator)->pt.y;
auto rectangle = rect{
{min_x, min_y},
{max_x, min_y},
{min_x, max_y},
{max_x, max_y}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句