c++ - 任意多边形中最大的内接矩形

标签 c++ algorithm opencv math

我使用 OpenCV 拼接已有一段时间了。现在我想做拼接的最后一步:裁剪图像。这导致在一般多边形中找到最大的内接轴平行矩形。

我已经用谷歌搜索并找到了一些答案 ( How do I crop to largest interior bounding box in OpenCV? )。尽管程序运行缓慢,但输出图像的质量很好(裁剪图像需要 15 秒,而将 36 张 1600x1200 图片拼接成 1 幅全景图只需要 47 秒),因为使用的算法时间复杂度很差(对于轮廓中的每个点,它扫描同一行/列中的所有点)。

有什么办法可以改善吗?谢谢。

P/S: 我也找到了这本书:

Finding the Largest Area Axis-Parallel Rectangle in a Polygon

Karen Daniels y Victor Milenkovicz Dan Rothx Harvard University,

Division of Applied Sciences,

Center for Research in Computing Technology,

Cambridge, MA 02138.

June 1995

但我没有任何想法将理论实现到代码中:v

最佳答案

您可能不想实现该算法;这将花费相当长的时间,而且我怀疑尽管存在大 O 界限,您仍会对性能感到失望。

听起来好像您正在处理栅格,所以您可以使用 linear-time algorithm for finding the largest rectangle of zeros在二进制矩阵中。

关于c++ - 任意多边形中最大的内接矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717241/

相关文章:

python - 使用 OpenCV 在鼠标光标下显示文本

c++ - 此代码是否访问 C++ 类中的关联数组?

c++ - 哪个运算符重载已用于 ifstream 对象以评估为 bool 值

c++ - 关于错误类

javascript - 如何使用给定字符串在二维数组中找到所有可能的组合

python - python中的二进制搜索程序不会停止循环

c++ - Edit Control 或 MessageBox() 中的表格字符串格式

c++ - 对 n 维点进行排序并跟踪原始索引

python - 如何使用Python将FFT(快速傅里叶变换)转换为极坐标变换?

android - 在 OpenCV 中跟踪连续帧中的特征