我知道如何使用Matlab中的regionprops()和使用OpenCV的boundingRect()找到最小边界框。如何在给定角度的情况下找到一个边界框(不是最小边界框)?例如,在下面的图像中,线是矩形的主轴。
答案 0 :(得分:1)
嗯,有很多可能的解决方案。我会提到其中三个:
旋转所有点,使红线与x(或y)轴平行;然后,找到转换点的最小轴定向边界框;然后,向后旋转框以找到所需的框。
找到红线上和蓝线上的每个点的投影(垂直于红线),每个坐标存储最小值和最大值。
找到红线所有点的距离;然后,考虑到你应该很容易找到两个盒子的坐标;然后你可以重复计算,取一条垂直于红色的线,找到盒子里缺少的两个坐标
答案 1 :(得分:1)
您可以变换点,使轴与x轴或y轴匹配。找到变换点的边界框,并通过逆变换将边界框转换回原始空间 转型细节: https://en.wikipedia.org/wiki/Rotation_(mathematics) 你可以找到像这样的转换点的边界框。
double xmin = 1e+37,ymin = 1e+37;
double xmax = -1e+37,ymax = -1e+37;
for(size_t i = 0; i < numPoints; ++i)
{
if( x[i] >= xmin ) xmin = x[i];
if( y[i] >= ymin ) ymin = y[i];
if( x[i] <= xmax ) xmax = x[i];
if( y[i] <= ymax ) ymax = y[i];
}
您可以使用任何大号替换1e + 37或使用BIG FLOAT
有关Stefan Gottschalk想法的定向边界框实现的更多细节也可以在此博客上找到Oriented bounding box