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

populating a line with points and then looking for intersection with contours

本文关键字:寻找 轮廓 交叉点 然后 填充 一条      更新时间:2023-10-16

我有两个点我想与一条线连接(opencv2.4 visual C 2010)。

我正在寻找使用FindContours的线上的点和轮廓之间的交叉点。

我的问题是,我将如何填充该线上点的结构,以便检查与轮廓的任何交集????

如果您可以提供一种在线上提出点的方法。

谢谢

正确的方法是计算布雷森汉姆的线算法:

Bresenham Line算法是一种算法,该算法确定哪个 应绘制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));