OpenCV平均方向/线角度

时间:2014-04-24 17:13:35

标签: c++ opencv

我试图获取路径两侧的线条角度,以便我可以确定去哪里(我想确保我直接向下行驶)。

在第一张图片中,"平均值"方向应该是中间直线(90度)。在第二个,它应该指向一点(60deg)。

我到目前为止的做法是将图像分成两半,并计算每一侧的白色像素。如果左边有更多,它会向右转,如果右边有更多,它会向左转。

但这有许多缺点。任何人都可以提出更好的方法吗?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

通过对结果点进行侵蚀和装箱,您可以计算角度:

    cv::Mat img = cv::imread(filename, 0);
    .
    .
    .
    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 3));
    cv::erode(img, img, element);

    std::vector<cv::Point> points;
    cv::Mat_<uchar>::iterator it = img.begin<uchar>();
    cv::Mat_<uchar>::iterator end = img.end<uchar>();

    for (; it != end; ++it)
       if (*it)
          points.push_back(it.pos());

    cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));

    double angle = box.angle;
    if (angle < -45.)
       angle += 90.;

OpenCV Bouding Box & Skew Angle