【问题标题】:How to extract a linear slice from an image in OpenCV / EMGU如何从 OpenCV / EMGU 中的图像中提取线性切片
【发布时间】:2011-06-24 06:23:37
【问题描述】:

我有一个图像和两个点,
我想读取这两点之间的像素,
并将它们重新采样成一个小的 1x40 数组。
我正在使用 EMGU,它是 OpenCV 的 C# 包装器。
谢谢,
软件

【问题讨论】:

    标签: image image-processing opencv computer-vision emgucv


    【解决方案1】:

    Emgu CV 在 Image 类中包含方法,用于沿称为 Sample 的线对颜色进行采样。

    有关定义,请参阅manualHere's 2.3.0 版中Image.Sample 的链接。

    您仍然需要对从Sample 返回的数组中的点进行重新采样/插值,以得到一个 40 元素数组。由于有多种方法可以重新采样,因此我建议您查看其他问题。

    【讨论】:

      【解决方案2】:

      您正在寻找的是Bresenham's line algorithm。它将允许您获得像素阵列中最接近直线的点。 Wikipedia 链接还包含帮助您入门的伪代码。

      【讨论】:

        【解决方案3】:

        旋转和裁剪

        我会先尝试这样做:

        • 用 (GetRotationMatrix2D) 计算旋转矩阵
        • 扭曲图像,使这条线是水平的 (WarpAffine)
        • 计算你的两个点的新位置(你可以使用Transform
        • 获取合适宽度和 1 px 高的图像矩形 (GetRectSubPix)

        这里和那里的插值可能会影响结果,但无论如何你都必须进行插值。您可以考虑在旋转之前裁剪图像。

        遍历直线的 8 个连接像素

        否则,您可以使用线迭代器来迭代两点之间的像素。请参阅InitLineIterator 的文档(抱歉,该链接指向 OpenCV 的 Python 版本,我从未听说过 EMGU)。我想在这种情况下,您会遍历未抗锯齿的线条的像素。但这应该快得多。

        手动插值

        最后,您可以将图像转换为数组,计算线条通过哪些元素并手动进行二次采样和插值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-10
          • 1970-01-01
          • 2012-07-08
          • 1970-01-01
          • 1970-01-01
          • 2011-04-26
          • 2022-01-07
          • 1970-01-01
          相关资源
          最近更新 更多