用点填充一条线,然后寻找与轮廓的交点

时间:2012-10-19 11:08:35

标签: c++ opencv line intersection points

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

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

我的问题是如何使用此行填充结构以检查与轮廓的任何交点?

如果哟可以提供一种方法来提高线上的积分,那就太好了。

由于

1 个答案:

答案 0 :(得分:0)

正确的方法是计算Bresenham's line algorithm

  

Bresenham线算法是一种确定哪种算法的算法   应绘制n维栅格中的点以形成a   接近两个给定点之间的直线。

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));
相关问题