我有两点我想用一行连接(OpenCv2.4 Visual c ++ 2010)。
我正在寻找他的线上的点与使用findContours找到的轮廓之间的交集。
我的问题是如何使用此行填充结构以检查与轮廓的任何交点?
如果哟可以提供一种方法来提高线上的积分,那就太好了。
由于
答案 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));