0
我需要知道在cv2.findContours()
函數之後如何定向(順時針/逆時針)輪廓。OpenCV輪廓方向
我可以通過調用cv2.contourArea()
並使用參數oriented
來完成。但是如何更快?也許輪廓alwatys在一個方向?
謝謝!
我需要知道在cv2.findContours()
函數之後如何定向(順時針/逆時針)輪廓。OpenCV輪廓方向
我可以通過調用cv2.contourArea()
並使用參數oriented
來完成。但是如何更快?也許輪廓alwatys在一個方向?
謝謝!
搜索輪廓上的極值點p,例如,最重要的一點。確定p的前驅(pred)和後繼(succ)。構建兩個向量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;
}
然而,在'cv :: contourArea'方法失敗的相同情況下,面積爲零(叉積永遠是零向量)。 –
獲取輪廓周圍的直角矩形,並根據獲取的矩形的長度和寬度對其進行定向。 –
也許我不是正確的制定我的問題。我需要知道輪廓旁路環行的方向。任務在每個點的外部法線外計算。 – toodef
示例圖像和預期輸出的示例將有助於 –