C# EmguCV:获取两点之间直线上像素的坐标

C# EmguCV:获取两点之间直线上像素的坐标,c#,wpf,emgucv,C#,Wpf,Emgucv,所以我的目标是:我想停在一行中的每个像素上,对这些像素进行一些处理。目前我正在使用EmguCV作为我的图像处理库。在openCV中,有一种称为LineIterator的方法,您可以使用该方法迭代一行中的像素。然而,我还没有在EmguCV中找到类似的方法,这正是我陷入困境的地方 目前,我可以使用该方法获得两个预定义点之间直线上所有像素的像素值。对于灰度图像,它返回一个n乘1的矩阵,其中n是该行上的像素数。然而,我无法获得与上述n×1矩阵中的像素值相对应的特定线上每个像素的坐标。因此,我无法对这些像

所以我的目标是:我想停在一行中的每个像素上,对这些像素进行一些处理。目前我正在使用EmguCV作为我的图像处理库。在openCV中,有一种称为LineIterator的方法,您可以使用该方法迭代一行中的像素。然而,我还没有在EmguCV中找到类似的方法,这正是我陷入困境的地方

目前,我可以使用该方法获得两个预定义点之间直线上所有像素的像素值。对于灰度图像,它返回一个n乘1的矩阵,其中n是该行上的像素数。然而,我无法获得与上述n×1矩阵中的像素值相对应的特定线上每个像素的坐标。因此,我无法对这些像素进行图像处理,即使我有它们的像素值。有没有办法在EmguCV上做到这一点

谢谢。

如果(x1,y1)和(x2,y2)是两个端点

(x1, y1) ___________________ (x2, y2)
然后你可以通过

for (int i = x1, i < x2; i++)
{
 int x = i;
 int y = (y1 + (y2-y1)/(x2-x1) * (x - x1)))
 cout << "Points : " << x << " " << y << endl;
}
for(int i=x1,i
(x1, y1) ___________________ (x2, y2)
然后你可以通过

for (int i = x1, i < x2; i++)
{
 int x = i;
 int y = (y1 + (y2-y1)/(x2-x1) * (x - x1)))
 cout << "Points : " << x << " " << y << endl;
}
for(int i=x1,i我为自己的项目实现了bresenham直线算法
(从中转换为C)

公共静态列表GetBresenhamLine(点p0,点p1)
{
int x0=p0.X;
int y0=p0.Y;
int-x1=p1.X;
int y1=p1.Y;
int dx=数学绝对值(x1-x0);
int dy=数学绝对值(y1-y0);
intsx=x0-dy)
{
err=err-dy;
x0=x0+sx;
}
if(e2
我实现了自己的“Point”结构,但认为它与Emgu的匹配。
我认为这应该考虑到任何特殊情况。

我为自己的项目实现了bresenham线算法 (从中转换为C)

公共静态列表GetBresenhamLine(点p0,点p1)
{
int x0=p0.X;
int y0=p0.Y;
int-x1=p1.X;
int y1=p1.Y;
int dx=数学绝对值(x1-x0);
int dy=数学绝对值(y1-y0);
intsx=x0-dy)
{
err=err-dy;
x0=x0+sx;
}
if(e2
我实现了自己的“Point”结构,但认为它与Emgu的匹配。
我认为这应该考虑到任何特殊情况。

谢谢。我认为这是Bresenham的直线算法。我在emguCV中寻找其他解决方案,这些解决方案可能已经内置到库中,但我没有找到,所以我想我会使用它。您发布的方程适用于绝对斜率小于1或1的直线在你的例子中,abs((y2-y1)/(x2-x1))<1.对于坡度较大的直线,需要通过y而不是x进行迭代以获得更好的直线。此外,我认为需要添加一个特例,用于直线垂直或水平时,因为在垂直直线上除以0。是的,这是Bresenham的算法,此答案仅适用于水平直线。accePTED回答考虑垂直方向的采样。谢谢。我想这是BrESeNAMM的直线算法。我在EGUCV中寻找一些其他的解决方案,可能已经在库中建立了,但是我没有找到,所以我想我会用这个。你所说的等式用于绝对斜率小于1的线。在你的例子中,abs((y2-y1)/(x2-x1))<1.对于坡度较大的直线,需要通过y而不是x进行迭代以获得更好的直线。此外,我认为需要添加一个特例,用于直线垂直或水平时,因为在垂直直线上除以0。是的,这是Bresenham的算法,此答案仅适用于水平直线。accePTED回答也考虑在垂直方向上采样。谢谢,我已经制作了自己的,它或多或少类似于你的代码。谢谢,我已经做了我自己的,它或多或少类似于你的代码。