【问题标题】:Rectangle matrix calculations in OpenCVOpenCV中的矩形矩阵计算
【发布时间】:2011-07-14 02:00:11
【问题描述】:

我有一个笼统的问题,想知道是否可以对矩形进行矩阵计算。我有一个 CvRect ,其中存储了带有坐标的信息,我有一个 cvMat 具有转换数据。我想知道的是,是否有办法让 Rect 使用矩阵数据从中生成一个旋转、倾斜和重新定位的矩形。我在网上搜索过,但我只能获得有关图像转换的信息。

提前感谢您的帮助。

【问题讨论】:

    标签: c opencv


    【解决方案1】:

    不,这是不可能的。 cv::Rect 也无法做到这一点,因为它只描述了曼哈顿世界中的矩形。有 cv::RotatedRect,但这也不处理倾斜。

    但是,您可以将矩形的角点输入 cv::transform: http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=transform#cv2.transform

    然后您将获得相应转换的四个点。请注意,此功能还有更专业的版本,例如warpPerspective() 和 warpAffine()。

    【讨论】:

    • 我查看了 WarpPerspective,但它要求提供 CvArr*。不确定它是否会让我在其中传递 CvRect,因为 OpenCV 文档仅指定 CvArr、CvMat 和 IplImage 将是唯一有效的数据成员。另外,我如何能够将 4 个不同的点传递给任一函数?
    • 不,根本不可能传递 Rect。您需要先构建一个包含四个点的 Mat。使用双通道矩阵或三通道矩阵(第三通道设置为 1)将点存储在其中。
    • 我能得到一个点到矩阵转换的例子吗?我试图用这些点创建一个矩阵,但是在进行变换时,我让它崩溃了。我使用“CvMat* pointMat = cvCreateMat(2, 2, CV_32F);”创建了一个 2x2 矩阵接下来我使用“cvSetReal2D”设置点信息我还验证了矩阵中的数据是否存在。当我运行转换功能时,我让它崩溃了。我使用的参数是“cvTransform(pointMat, pointMat, H, 0);”其中“H”是一个 3x3 矩阵。
    • 我发现了我的问题。对我来说,创建自己的 Rectangle 类更有意义,这些类基于 4 个点存储信息并以这种方式进行数学运算,而不是试图弄清楚 OpenCV 如何处理所有事情。感谢您的建议。
    • 是的,我也总是倾向于使用“已经存在”的东西,但有时你最终还是会自己做。 OpenCV 似乎对处理矩形没有太大帮助..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2015-03-31
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多