如何水平连接 OpenCV 轮廓?
How to connect OpenCV contours horizontally?
我在 Opencv 2.9 (C++) 中使用 findContours。我得到的是一个 vector> contours,它描述了我的轮廓。假设我有一个矩形,其轮廓存储在向量中。接下来我想做的是,用一条线连接轮廓的左右两侧。例如。矩形左上角下方 10 像素至矩形右上角下方 10 像素。这条线应该在轮廓结束的地方结束。如果 pointPolygonTest
为真,是否有更好的方法,然后仅通过扫描线明智地通过该通道并检查每个像素?
提前致谢!
假设您有角点(左上角、右上角、右下角和左下角点),那么您可以轻松计算每条由两个点定义的两条线之间的交点。
例如line(P1,P4)与line(R1,R2)相交,交点为我:
下面是一段代码,用于在直线相交时计算交点:
// 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;
}
我在 Opencv 2.9 (C++) 中使用 findContours。我得到的是一个 vector> contours,它描述了我的轮廓。假设我有一个矩形,其轮廓存储在向量中。接下来我想做的是,用一条线连接轮廓的左右两侧。例如。矩形左上角下方 10 像素至矩形右上角下方 10 像素。这条线应该在轮廓结束的地方结束。如果 pointPolygonTest
为真,是否有更好的方法,然后仅通过扫描线明智地通过该通道并检查每个像素?
提前致谢!
假设您有角点(左上角、右上角、右下角和左下角点),那么您可以轻松计算每条由两个点定义的两条线之间的交点。
例如line(P1,P4)与line(R1,R2)相交,交点为我:
下面是一段代码,用于在直线相交时计算交点:
// 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;
}