2016-09-27 4 views
0

Мне нужно найти крайние точки кругов на этом изображении (левый верхний угол, правый верхний угол, нижний левый угол и, наконец, нижний правый угол)Поиск радиуса и крайних координатных точек окружностей (преобразование окружности Hough)

Изображение проходит через пороговое значение, а затем исчезает, когда накладывается возврат к исходному изображению.

enter image description here , например (Drew с помощью краски)

enter image description here

и соединить их вместе (Drew с помощью краски)

enter image description here

enter image description here

но, как я полагаю, для получения радиуса и x и y координаты из центра сначала, а затем провести линию?

for (int i = 0; i < circles.size(); i++) 
{ 
    //icout << i<<"\n"<<endl; 
    Point center(cvRound(circles[i][ 0]), cvRound(circles[i][1])); 
    stringstream ss; 
    ss << i + 1; 
    putText(dst, ss.str(), center, 1, 1, Scalar(255, 0, 225), 2, 0); 
    int radius = cvRound(circles[i][2]); 
    // circle center 
    circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0); 
    // circle outline 
    circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0); 
    //for original image overlap 
    circle(dst, center, 3, Scalar(0, 255, 0), -1, 8, 0); 
    // circle outline 
    circle(dst, center, radius, Scalar(0, 255, 255), 3, 8, 0); 


} 

это демо-код, но я борюсь, чтобы понять, о circles.size() от

for (int i = 0; i < circles.size(); i++) 

и

Point center(cvRound(circles[i][ 0]), cvRound(circles[i][1])); 

я буду признателен, если вы могли бы объяснить это мне более простым способом, так как я все еще участвую в учебном процессе, только отправная точка для начала. Спасибо!

+0

не совсем ответ на ваш вопрос, но может ли выпуклый корпус всех кругов быть решением того, что вы изначально хотели? http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/hull/hull.html – Micka

+0

@ Мичка Да! Это именно то, что я ищу, но мне просто нужен план. Могу ли я изменить его цвет, чтобы я мог его порождать, чтобы получить только контур без внутренних контуров? Я не уверен, что делает rng.uniform (0,255), хотя и зачем ему 3 из них: l – Lyber

+0

try 'for (int i = 0; i (), 0, Point()); } 'нарисовать только корпус в полном красном цвете. Rng-код - генератор случайных чисел, поэтому код учебника будет рисоваться случайным цветом! – Micka

ответ

0

Я думаю, вам нужно показать определение кругов, т. Е.какой тип круги

, похоже, это может быть vector<vector<int>> (или какой-либо форме tuple<int>)

, если я не неправильно ваш вопрос circles.size() является количество кругов, а не радиус окружности (size()), являющегося функция, которая возвращает количество элементов в векторе

внутренний vector<int>, кажется, сохраняя положение х в [0] и положение у в [1]

и г adius окружности в [2]

+0

Спасибо! Удалось понять немного лучше :) – Lyber

0

Если вы посмотрите на OpenCV документ на круг преобразования Хока http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html?highlight=houghcircles#houghcircles

под переменной кругов вы можете увидеть, что это вектор был каждый круг представляет собой 3 кортеж с значения (х, у, радиус)

Так что в вашем случае, чтобы получить данные окружности я:

xCoordinate = окружности [I] [0]

yCoordinate = окружности [I] [1]

радиус окружности = [I] [2]

circles.size(): это число кругов, которые были найдены.

После этого, чтобы найти нижнюю левую точку, например, просто найдите 6 точек с наименьшей координатой y и найдите эту группу с наименьшей координатой x.

+0

Спасибо! Мне удалось получить координаты x и y, но что вы подразумеваете под «6 точками с наименьшей координатой y»? – Lyber

+0

создать вектор для всех y координат окружностей. Затем сортируйте (и получите индексы) и возьмите значения 6 кругов с самой низкой координатой y.Для этих кругов найдите круг, который имеет самую низкую координату x. –

+0

Простите, я действительно медленный ученик, но на данный момент я сначала создал вектор, а затем добавил координату x и y в список внутри circle.size для цикла vector данные; data.push_back (Point (круги [i] [0], круги [i] [1])); – Lyber

Смежные вопросы