如何水平连接OpenCV轮廓?

时间:2015-02-08 23:48:27

标签: c++ opencv

我在Opencv 2.9(C ++)中使用了findContours。我得到的是一个矢量>轮廓,描述我的轮廓。假设我有一个矩形,其轮廓存储在矢量中。我接下来要做的是,在任何一点用线连接轮廓的左侧和右侧。例如。左上角下方10个像素到矩形右上角下方10个像素。该线应该在轮廓所在的位置结束。有没有更好的方法,那么只需通过该通道扫描扫描线并检查每个像素pointPolygonTest是否为真?

提前致谢!

1 个答案:

答案 0 :(得分:1)

假设您有角(左上角,右上角,右下角和左下角),那么您可以轻松计算两条线之间的交点,每条线用两个点定义。

例如,线(P1,P4)线(R1,R2)相交,交点为 I

enter image description here

这是一个片段代码,用于在线相交时计算交点:

// Finds the intersection of two lines, or returns false.
// The lines are defined by (o1, p1) and (o2, p2).
bool intersection(cv::Point2f o1, cv::Point2f p1, cv::Point2f o2, cv::Point2f p2, cv::Point2f &r)
{
    cv::Point2f x = o2 - o1;
    cv::Point2f d1 = p1 - o1;
    cv::Point2f d2 = p2 - o2;

    float cross = d1.x*d2.y - d1.y*d2.x;
    if (std::abs(cross) < /*EPS*/1e-8)
        return false;

    double t1 = (x.x * d2.y - x.y * d2.x)/cross;
    r = o1 + d1 * t1;
    return true;
}