我有一个图像和两个点,
我想读取这两个点之间的像素,
并将它们重新采样到一个小的 1x40 数组中。
我正在使用 EMGU,它是 OpenCV 的 C# 包装器。
谢谢,
西南
问问题
2227 次
3 回答
4
您正在寻找的是Bresenham's line algorithm。它将允许您获得像素阵列中最接近直线的点。Wikipedia 链接还包含帮助您入门的伪代码。
于 2011-02-12T13:35:08.140 回答
2
旋转和裁剪
我首先尝试这样做:
GetRotationMatrix2D
用 ( )计算旋转矩阵- 扭曲图像,使这条线是水平的 (
WarpAffine
) - 计算你的两个点的新位置(你可以使用
Transform
) - 获取合适宽度和 1 px 高的图像矩形 (
GetRectSubPix
)
到处插值可能会影响结果,但无论如何你都必须插值。您可以考虑在旋转之前裁剪图像。
遍历线的 8 个连接像素
否则,您可以使用线迭代器来迭代两点之间的像素。请参阅文档InitLineIterator
(抱歉,该链接指向 OpenCV 的 Python 版本,我从未听说过 EMGU)。我想在这种情况下,您会遍历未抗锯齿的线条的像素。但这应该快得多。
手动插值
最后,您可以将图像转换为数组,计算线条通过哪些元素,并手动进行二次采样和插值。
于 2011-02-09T17:08:54.793 回答