Я написал программу для
- Информация о комбинированном крае и информация о цвете, чтобы сформировать изображение, которое мне понадобится для обнаружения прямой линии от
Затем я использую findContour и drawContour, чтобы перерисовать карту улик
, после чего я использую некоторый алгоритм прореживания, чтобы свернуть строку в одну строку
Используйте HoughLinesP для вычисления для сегмента строки,Есть только следы линии.И самое главное пропустили горизонтальную линию
Из этого набора отрезков линии вычислите точку пересечения (не включенную в код) Из пересечения нарисуйте четырехугольник из точки пересечения, вершины (называемые v1 и v2, наиболее удаленные от пересеченияpoint) горизонтальной / вертикальной линии и вычисления вершины на основе отражения точки пересечения на линии между v1 и v2
Однако это не работает так, как мне кажется.Я думаю, что проблема заключается в том, что внутренняя граница прямоугольника не заполнена.Должен ли я использовать морфологию, например, дилатацию, а затем разрушать.У меня закончились идеи предварительно обработать изображение двух «сигналов», прежде чем пытаться обнаружить их на пересечение с Hough Transform
Нужна помощь всех!
Заранее спасибо
Ниже приведеномой фрагмент кода для генерации следующего
int FindBoxes(cv::Mat& colorMap,cv::Mat& edgeMap)
{
cv::Mat frame;
// colorMap is a coloured filtered map while edgeMap is an edge filter Map. frame will be the colour i want
cv::bitwise_and(colorMap, edgeMap, frame);
// A trial method by using findContour to get the interior line filled up
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(frame, contours, hierarchy, CV_RETR_EXTERNAL,
cv::CHAIN_APPROX_SIMPLE);
cv::Mat Map = cv::Mat::zeros(cueMap1.size(), CV_8U);
cv::drawContours(Map, contours, -1, cv::Scalar(255, 255, 255), CV_FILLED);
// thin the line to collapse it into one single line for Hough Detection
cv::Mat thin;
thinning(Map, Map);
cv::GaussianBlur(Map, Map, cv::Size(5,5),1.0,1.0);
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(Map, lines,1, CV_PI/90, 2, 30, 0);
return 0;
}