Перейти к содержимому
Compvision.ru

Halloween

Пользователи
  • Количество публикаций

    24
  • Зарегистрирован

  • Посещение

Все публикации пользователя Halloween

  1. Как прикрутить OpenCV к билдеру?

    Доработал свою программу.Результатом удовлетворен на все 100! Особая благодарность Nuzhny,направил на путь истины!Большущее тебе спасибо!
  2. Есть монохромное изображение с линиями,но линии нечёткие.Пытаюсь однопикселизировать изображение так,чтобы потери были минимальные и остался только контур. Например,изображение: test.bmp Нужно убрать нечеткости такого рода: 3.bmp dilate.bmp Кто сталкивался с подобной проблемой,буду рад за информацию.
  3. Доработал свою программу.Результатом удовлетворен на все 100! Особая благодарность Nuzhny,направил на путь истины!Большущее спасибо
  4. Желательно 8-ми связные. Насчет соединения конечных точек,то я сейчас работаю над этим,используя фильтр Калмана(фильтр прогнозирует след. положение точки по траектории).Это должно помочь сгладить места соединений. Без разницы откуда удалять,лишь бы не получилось лишних разрывов и процесс был автоматизирован.Свою идею как это сделать я представил выше(методом дифференцирования).
  5. Практически то,но маленькие разрывы всё-равно остались.Посмотрите как я реализовал свою задачу,воспользовавшись тем,что вы предложили ранее: dist.cpp Решение действенно,но для него нужно давать четкое изображение без шумов и утолщений,иначе будут баги. Есть идея почистить изображение с помощью дифференцирования.Поясню алгоритм: 1.Двигаться по горизонтали,пока не найдется точка. 2.Если точка нашлась-двигаться при координате Х этой точки только уже по-вертикали(по Y): -если точка не нашлась-оставляем найденную и двигаемся дальше; -если нашлась,то накладываем точку ,найденную по-вертикали на точку,найденную по-горизонтали(логическое ИЛИ).Таким образом получаем нужную нам точку,а остальные отбрасываем. 3.Двигаемся дальше. Алгоритм вроде оптимальный,но никак не дойду мыслями,как его красиво реализовать в VS.
  6. Мне скорее надо убрать лишние помехи (шумы) с линий!Просто если я сделаю кривую гладкой,то я не решу свою задачу ,потому что будут большие потери.А разрывность я устраняю другим методом.
  7. Как прикрутить OpenCV к билдеру?

    Воспользовался следующей морфологией,но потери слишком большие,как их можно уменьшить: //cvDilate() #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <stdlib.h> #include <stdio.h> #define CV_SHAPE_ELLIPSE 1 IplImage* image = 0; IplImage* dst = 0; IplImage* dilate = 0; int radius = 1; int radius_max=10; // // функция-обработчик ползунка - // радиус ядра void myTrackbarRadius(int pos) { radius = pos; } int iterations = 1; int iterations_max = 10; // // функция-обработчик ползунка - // число итераций void myTrackbarIterations(int pos) { radius = pos; } int main(int argc, char* argv[]) { IplImage* image = cvLoadImage("d:\\test.bmp", 1); // клонируем картинку dst = cvCloneImage(image); dilate = cvCloneImage(image); // окно для отображения картинки cvNamedWindow("original",CV_WINDOW_AUTOSIZE); cvNamedWindow("dilate",CV_WINDOW_AUTOSIZE); cvCreateTrackbar("Radius", "original", &radius, radius_max, myTrackbarRadius); cvCreateTrackbar("Iterations", "original", &iterations, iterations_max, myTrackbarIterations); while(1){ // показываем картинку cvShowImage("original",image); // создаём ядро IplConvKernel* Kern = cvCreateStructuringElementEx(radius+1, radius+1, radius, radius, CV_SHAPE_ELLIPSE); // выполняем преобразования cvDilate(image, dilate, Kern, iterations); // показываем результат cvShowImage("dilate",dilate); //cvSaveImage("dilate.jpg", dilate); cvReleaseStructuringElement(&Kern); char c = cvWaitKey(33); if (c == 27) { // если нажата ESC - выходим cvSaveImage("dilate.jpg", dilate); break; } } // освобождаем ресурсы cvReleaseImage(&image); cvReleaseImage(&dst); cvReleaseImage(&dilate); // удаляем окно cvDestroyWindow("original"); cvDestroyWindow("dilate"); return 0; } Пробовал на изображении: test.bmp потери большие...
  8. Находим скелет (супер :))

    Что верно,то верно Спасибо!
  9. Находим скелет (супер :))

    А возможен вариант переделки программы под статическое изображение.Чтоб просто загружать нужную картинку? Просто для меня сделать это в Builder туговато,поэтому и спрашивал про VS.
  10. Находим скелет (супер :))

    Заголовочные я с разных проектов пособирал. Всё сделал как Вы сказали,проект прокомпилировался без ошибок ,но в результате выдал нерабочую форму:
  11. Находим скелет (супер :))

    Поставил ,теперь вылезла такая история: А нету этого же проекта в Visual Studio,с ним запар поменьше будет?
  12. Находим скелет (супер :))

    Архив с проектом skeleton.rar не запускается!Возникает ошибка следующего характера: Не пойму где прокол...
  13. Это немного не то,мне нужна скорее именно однопикселизация,а не скелетизация!
  14. Как прикрутить OpenCV к билдеру?

    Например,какую морфологию?Я просто боюсь,что это будет получится тяжелая и заковыристая задача и алгоритм получится громоздким.
  15. Как прикрутить OpenCV к билдеру?

    А можно ли реализовать создание треков так,чтобы они прорисовывались только один раз(однопиксельно) без "утолщений".Это нужно ,чтобы избежать трудностей в дальнейшем.
  16. Как прикрутить OpenCV к билдеру?

    Целесообразно будет использовать функцию с подальшей передачей параметров ?И куда лучше сохранять подошедшие концы.Я немного сбился со своего алгоритма. //Евклидово расстояние double dist(const CvPoint &w1, const CvPoint &w2) { return sqrt((double)((w2.x - w1.x)*(w2.x - w1.x) +(w2.y - w1.y)*(w2.y - w1.y))) ; } Или можно сделать все как-то проще?
  17. Как прикрутить OpenCV к билдеру?

    Я разобрался,все работает,проблема была в версии OpenCV. Я для начала хочу все-таки восстановить элементарное изображение,используя фильтр Калмана,думаю,как правильней будет найти соответствующие концы. А насчет оптимизации,я думаю ,что все-таки целесообразней будет выполнять восстановление в заданном окне,которое будет перемещаться по изображению,главное правильно размер подобрать.
  18. Как прикрутить OpenCV к билдеру?

    Ошибок нет,но программа не выдает результат! Выкладываю элементарное изображение: Для наглядности вот тип изображения,которое должно восстанавливаться в идеале:
  19. Как прикрутить OpenCV к билдеру?

    Программа успешно компилируется,но при запуске выдает ошибку.Пробовал уже и в студии и в Builder. В Builder: В студии: Не могу понять,что ей не нравится.
  20. Как прикрутить OpenCV к билдеру?

    Чувствую,что тоже на нее перейду,потому что Builder ругается на it1,пишет,что он уже был декларирован.Может я где-то что-то и недоглядел : for (tracks_cont::iterator it1 = tracks.begin(); it1 != tracks.end() { if (it1->size() == 1) it1 = tracks.erase(it1); else ++it1; } for (tracks_cont::iterator it1=tracks.begin(); it1 != tracks.end(); ++it1) { for (points_cont::iterator it2 = it1->begin(); it2 != it1->end(); ++it2) { (second_img->imageData + it2->y * second_img->widthStep + it2->x)[0] = 0; cvShowImage("second_img", second_img); if (cvWaitKey(40) > 0) break; } } [/code] Сейчас буду пробовать в студии.
  21. Как прикрутить OpenCV к билдеру?

    Спасибо,буду разбираться!Потом отпишусь!А какую среду разработки посоветуешь или без разницы?
  22. Как прикрутить OpenCV к билдеру?

    На данном этапе я пока собрал нужную литературу и додумываю как всё-таки использовать фильтр Калмана,ведь он в основном используется для динамических систем. Я так понял ,что нужно создать окно,которое будет проходить по изображению и в котором будет проводиться наше восстановление.У меня была идея сделать из линии что-то вроде траектории движения и на разрыве использовать фильтр Калмана до тех пор,пока траектория не продолжится .Но твоё решение вроде смотрится проще,только я пока не сильно понимаю как найти конец какой цепочки подходит к концу другой.Если есть примеры или литература-буду благодарен за просвещение!
  23. Как прикрутить OpenCV к билдеру?

    Есть только изображение,в этом-то и загвоздка!Я так понимаю,что массив с координатами точек надо получить в ходе выполнения задачи. Мне бы хотя бы разобраться как одну линию соединить,дальше уже буду сам додумывать!
  24. Как прикрутить OpenCV к билдеру?

    Есть изображение с разорванной линией! Как можно восстановить его в Builder 6,используя фильтр Калмана,который хорошо описан в OpenCV.Пример изображения представлен на рисунке. Фильтр Калмана прогнозирует следующее положение объекта,в нашем случае линии. Кто сталкивался или знает как решить эту проблему,видел похожие исходники помогите!
×