0

我有两点想用一条线连接(OpenCv2.4 Visual c++ 2010)。

我正在寻找他的线上的点和我使用 findContours 找到的轮廓之间的交点。

我的问题是如何用这条线的点填充结构,以检查与轮廓的任何交叉点????

如果您可以提供一种方法来提出在线积分,那将是很好的。

谢谢

4

1 回答 1

0

正确的方法是计算Bresenham 线算法

Bresenham 线算法是一种算法,该算法确定应绘制 n 维栅格中的哪些点,以便形成两个给定点之间的直线的近似值。

OpenCV drawLine 函数可能使用了这个算法。如果速度不是问题,另一种方法是:在遮罩图像中画线,然后遍历此遮罩中的像素(或至少围绕线的 ROI)并收集点的坐标:

cv::Mat mask = cv::Mat::zeros(originalImage.size(), CV_8U);
cv::Point p1, p2;
std::vector<cv::Point> points;
cv::line(mask, p1, p2, CV_RGB(255,255,255), CV_AA);
for (int row = min(p1.y, p2.y); row < max(p1.y, p2.y); ++row) 
  for (int col = min(p1.x, p2.x); col < max(p1.x, p2.x); ++col)
    if(mask.at<unsigned char>(row, col) != 0)
      points.push_back(cv::Point(col, row));
于 2012-10-19T13:10:36.700 回答