gpt4 book ai didi

python - OpenCV轮廓方向

转载 作者:行者123 更新时间:2023-12-02 17:10:41 36 4
gpt4 key购买 nike

我需要知道cv2.findContours()函数后轮廓的方向(顺时针/逆时针)如何。

我可以通过使用cv2.contourArea()参数调用oriented来实现。但是,如何更快呢?也许轮廓朝一个方向定向?

谢谢!

最佳答案

在轮廓上搜索一个极点p,例如最正确的一点。确定p的前任(pred)和后继(succ)。建立两个 vector a = pred-p,b = succ-p。然后,叉积a x b的z分量的符号会告诉您轮廓的方向。

bool contourOrientationCW(const std::vector<cv::Point>& contour) {
if (contour.size() >= 3) {
cv::Point rm; // right most point
size_t rmIdx; // index of right most point

for (size_t i = 0; i < contour.size(); i++) {
const cv::Point& p = contour[i];

if (p.x > rm.x || p.x == rm.x && p.y > rm.y) {
rm = p;
rmIdx = i;
}
}
size_t i = rmIdx - 1; if (i < 0) i = contour.size() - 1;
const cv::Point& pred = contour[i];
i = rmIdx + 1; if (i == contour.size()) i = 0;
const cv::Point& succ = contour[i];

Vec2i a = pred - rm, b = succ - rm;
return a[0]*b[1] >= a[1]*b[0];
}
return true;
}

关于python - OpenCV轮廓方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536103/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com