Hough Circle в c #, динамическая память - PullRequest
2 голосов
/ 20 декабря 2010

У меня проблема с динамическим распределением памяти при получении данных из матрицы

Image image_gray = new Image("im1.jpg");
Matrix circles = new Matrix(100, 1, 3);

Вопрос 1: Как я могу найти динамическую память, потому что я не знаю количество кругов?

Emgu.CV.CvInvoke.cvHoughCircles(image_gray, circles, HOUGH_TYPE.CV_HOUGH_GRADIENT,
    2, 100, 200, 100, 10, 500);

Вопрос 2: Теперь круг - это матрица с [100, 3], Как я могу получить

point center= Round (circle[i][1], circle[i][1])

Как я могу получить

int radius= circle[i][2]; 

как должен выглядеть мой цикл for для получения данных из матрицы, и приведение должно быть указателем типа point и int.

Я уже пробовал (НЕ РАБОТАЕТ / ОШИБКА)

for (int i=0; i < circles.Rows; i++) 
{ Matrix entry = circles.GetRow(i);

 float x = entry[0]; 
 float y = entry[1]; 
float r = entry[2];} // NOT WORKING

потому что вместо копирования (обязательной) только (i) строки она копирует всю матрицу (кружки) и с плавающей точкой x = ...... выдает ошибки

No overload for method 'this' takes '1' arguments

Пожалуйста, помогите мне в этом отношении

привет


извините за ответ на мой вопрос. пожалуйста, дайте намек на динамическое распределение памяти и матричные данные

1 Ответ

0 голосов
/ 20 декабря 2010

Документация предполагает, что она будет увеличивать матрицу, чтобы соответствовать, но это также противоречит тому, что, честно говоря, я бы попробовал матрицу с 1 строкой по 1 столбцу на изображении с большим количеством кружков и посмотрел бы, что это дает вам. Я вижу, что вы используете тип Matrix - я не знаю, как вы конвертируете в IntPtr, необходимый для cvHoughCircles, но это должно быть простым, чтобы перебрать каждую строку и извлечь результаты, которые являются 3 числами с плавающей запятой: (x, у, г) -

for (int i=0; i < circles.Cols; i++) {
    Matrix<float> entry = circles.GetRow(i);
    float x = entry[0]; // guessing here - the doc'n is truly awful
    float y = entry[1];
    float r = entry[2];
}
...