我试图获取路径两侧的线条角度,以便我可以确定去哪里(我想确保我直接向下行驶)。
在第一张图片中,"平均值"方向应该是中间直线(90度)。在第二个,它应该指向一点(60deg)。
我到目前为止的做法是将图像分成两半,并计算每一侧的白色像素。如果左边有更多,它会向右转,如果右边有更多,它会向左转。
但这有许多缺点。任何人都可以提出更好的方法吗?
答案 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.;