Smorodov 579 Жалоба Опубликовано April 11, 2010 Все, разобрался! Только возникает другой вопрос: пытаюсь загрузить картинку с помощью команды frame = cvLoadImage("img.jpg",1), но содержимое frame = NULL? Причин может быть пара: 1) картика не в директории с запускаемым файлом, можно прпробовать задать путь жестко, например : "C:\\img.jpg", скопировав туда изображение. 2) не поддерживаемый (какой-нибудь модифицированный формат картинки). скорее всего первое. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AlCapone 0 Жалоба Опубликовано April 22, 2010 Пробные заголовки для OpenCV на паскале. Библиотека VCopenCV.dll, используемая в хедерах, выдрана из VisionLab Mitov Software (одна dll вместо нескольких - кому неудобно, может исправить имя библиотеки в соответсвующих юнитах на исходные имена dll). Багов уйма, но кто хочет попробовать - вперед. Комментариии, замечания и исправления приветствуются. Код максимально старался перенести, но не все процедуры и функции экспортируются, поэтому примеры использования в Делфи и СиБилдере будут немного отличаться. Там, где в исходных хедерах использовался двойной указатель - в паскале оставил одинарный. Пробовал компилить - пришлось использовать все-таки двойной (передавать адрес указателя вместо самого указателя). Лучше варианта пока нет (либо пишем на VC++, C++). Замечательная библиотека! Но если я правильно понял, то работа с камерой здесь не реализована? Поскольку данная запись вызывает ошибку ([Error] Unit1.pas(20): Undeclared identifier: 'CvCapture'): var capture : CvCapture; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
andrew smirnov 0 Жалоба Опубликовано April 22, 2010 Замечательная библиотека! Но если я правильно понял, то работа с камерой здесь не реализована? Поскольку данная запись вызывает ошибку ([Error] Unit1.pas(20): Undeclared identifier: 'CvCapture'): var capture : CvCapture; Не реализована. Если есть желание - можете дополнить и обновить заголовочные файлы. Самому пока некогда. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex_grem 0 Жалоба Опубликовано April 24, 2010 Помогите, пожалуйста! Есть либа, созданная в MS Visual Studio 2008 (lib и dll). Файл .lib сконвертил через coff2omf, добавил в проект C++Builder, а он все равно пишет: [iLINK32 Error] Error: Unresolved external ...... Файл .dll лежит рядом с файлом .lib....Может кто-что посоветует...2 дня бьюсь, а ответа так и не нашел Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 25, 2010 Помогите, пожалуйста! Есть либа, созданная в MS Visual Studio 2008 (lib и dll). Файл .lib сконвертил через coff2omf, добавил в проект C++Builder, а он все равно пишет: [iLINK32 Error] Error: Unresolved external ...... Файл .dll лежит рядом с файлом .lib....Может кто-что посоветует...2 дня бьюсь, а ответа так и не нашел Значит не все Lib подключены, что он конкретно пишет? Какие функции не может найти? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 3, 2010 Набрел в сети на проект оболочки под Делфи: http://opencv-delphi.svn.sourceforge.net/v.../opencv-delphi/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
andrew smirnov 0 Жалоба Опубликовано June 3, 2010 Набрел в сети на проект оболочки под Делфи: http://opencv-delphi.svn.sourceforge.net/v.../opencv-delphi/ видели. он сильно не полный. хотя и вроде под версию 2.0 адаптирован. я автору того проекта где-то полгода назад давал ссылку на эту тему - видимо проект заброшен... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AlCapone 0 Жалоба Опубликовано July 26, 2010 Задача связана с поиском радужной оболонки. Был вот такой вот код на С: int main(int argc, char** argv) { IplImage* img; if( argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0) { IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); CvMemStorage* storage = cvCreateMemStorage(0); cvCvtColor( img, gray, CV_BGR2GRAY ); cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 ); int i; for( i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); } cvNamedWindow( "circles", 1 ); cvShowImage( "circles", img ); } return 0; } Я его переделал на Делфу: procedure TForm1.Button2Click(Sender: TObject); var img, gray: PIplImage; storage : PCvMemStorage; circles : PCvSeq; s : CvSize; i : integer; r : PCVRect; begin img := cvLoadImage(pchar(OpenPictureDialog1.FileName),1); s.width := img.width; s.height := img.height; gray := cvCreateImage(s,8,1); storage := cvCreateMemStorage(0); cvCvtColor(PCvArr(img),PCvArr(gray),CV_BGR2GRAY); cvSmooth(PCvArr(gray),PCvArr(gray),CV_GAUSSIAN,9,9,0,0); circles := cvHoughCircles(PCvArr(gray),storage,CV_HOUGH_GRADIENT,2,gray.height/4,200,100,0,0); for i:=0 to circles.total do begin r := PCvRect(cvGetSeqElem(circles,i)); Image1.Canvas.Brush.Color := clRed; Image1.Canvas.Ellipse(r.x,r.y,r.x+r.width,r.y+r.height); end; end; Как видите, я вместо cvCircle писал CvRect. Оно то что-то считает, но как Вы понимаете не то, есть ли какая-то алтернатива вот этому кусочку кода на Делфи: float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); Мне нужно просто вытянуть координаты кругов: Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 26, 2010 Задача связана с поиском радужной оболонки. Был вот такой вот код на С: int main(int argc, char** argv) { IplImage* img; if( argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0) { IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); CvMemStorage* storage = cvCreateMemStorage(0); cvCvtColor( img, gray, CV_BGR2GRAY ); cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 ); int i; for( i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); } cvNamedWindow( "circles", 1 ); cvShowImage( "circles", img ); } return 0; } Я его переделал на Делфу: procedure TForm1.Button2Click(Sender: TObject); var img, gray: PIplImage; storage : PCvMemStorage; circles : PCvSeq; s : CvSize; i : integer; r : PCVRect; begin img := cvLoadImage(pchar(OpenPictureDialog1.FileName),1); s.width := img.width; s.height := img.height; gray := cvCreateImage(s,8,1); storage := cvCreateMemStorage(0); cvCvtColor(PCvArr(img),PCvArr(gray),CV_BGR2GRAY); cvSmooth(PCvArr(gray),PCvArr(gray),CV_GAUSSIAN,9,9,0,0); circles := cvHoughCircles(PCvArr(gray),storage,CV_HOUGH_GRADIENT,2,gray.height/4,200,100,0,0); for i:=0 to circles.total do begin r := PCvRect(cvGetSeqElem(circles,i)); Image1.Canvas.Brush.Color := clRed; Image1.Canvas.Ellipse(r.x,r.y,r.x+r.width,r.y+r.height); end; end; Как видите, я вместо cvCircle писал CvRect. Оно то что-то считает, но как Вы понимаете не то, есть ли какая-то алтернатива вот этому кусочку кода на Делфи: float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); Мне нужно просто вытянуть координаты кругов: cvCircle ничего не считает, эта команда рисует окружности, это всего лишь вывод результата. Координаты кругов: x=p[0] ; y=p[1] ; радиус = p[2]. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AlCapone 0 Жалоба Опубликовано July 27, 2010 Я понимаю, но я спрашивал можно ли на Делфе как нибудь заменить данную строчку: float* p = (float*)cvGetSeqElem( circles, i ); Если я правильно понял, то вот это (float*)cvGetSeqElem( circles, i ) - перевод в формат типа Float, если написать на делфе float(cvGetSeqElem( circles, i )), то выдаст ошибку: типы PChar i Float - несовместимы. Вот я и спрашиваю можно ли как-то это обойти или только так? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 27, 2010 Я понимаю, но я спрашивал можно ли на Делфе как нибудь заменить данную строчку: float* p = (float*)cvGetSeqElem( circles, i ); Если я правильно понял, то вот это (float*)cvGetSeqElem( circles, i ) - перевод в формат типа Float, если написать на делфе float(cvGetSeqElem( circles, i )), то выдаст ошибку: типы PChar i Float - несовместимы. Вот я и спрашиваю можно ли как-то это обойти или только так? Это приведение не к типу float а к указателю на данные типа float. PChar это указатель на данные типа char или BYTE . Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CornersKir 0 Жалоба Опубликовано August 16, 2010 Как видите, я вместо cvCircle писал CvRect. Оно то что-то считает, но как Вы понимаете не то, есть ли какая-то алтернатива вот этому кусочку кода на Делфи: float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); Мне нужно просто вытянуть координаты кругов: Мне тоже интересен этот вопрос. Если интерпретировать p как указатель на вещественное число (PFloat = ^real;), то возникает естественная ошибка "E2016 Array Type Required" при обращении к p[0] и к p[1]. Если использовать "pt: pCvPoint;" и "pt := PCvPoint(cvGetSeqElem(circles, i));", то в координатах pt x и y оказывается мусор. Каким образом в Delphi можно правильно извлечь "pCvPoint" из "pCvSeq", возвращаемого cvHoughCircles и cvHoughLines. Заранее спасибо за ответ. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 16, 2010 Мне тоже интересен этот вопрос. Если интерпретировать p как указатель на вещественное число (PFloat = ^real;), то возникает естественная ошибка "E2016 Array Type Required" при обращении к p[0] и к p[1]. Если использовать "pt: pCvPoint;" и "pt := PCvPoint(cvGetSeqElem(circles, i));", то в координатах pt x и y оказывается мусор. Каким образом в Delphi можно правильно извлечь "pCvPoint" из "pCvSeq", возвращаемого cvHoughCircles и cvHoughLines. Заранее спасибо за ответ. Приводить понадобилось, чтобы получть float, а CvPoint определена так: typedef struct CvPoint { int x; int y; } CvPoint;[/code] То есть там 8 байт (два int-а по 4 байта), на два float-а не тянет (отсюда ошибка). Скорее всего это Integer по дельфофски (два четырехбайтовых числа). ЗЫ: С делфофскими форматами данных знаком поверхностно, могу ошибаться. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CornersKir 0 Жалоба Опубликовано August 17, 2010 Пришёл к выводу, что надо создать дополнительные типы записей и указатели на них для каждого конкретного вида возвращаемых функциями cvHoughCircles и cvHoughLines данных. Например, для cvHoughLines2 и CV_HOUGH_STANDARD запись будет содержать два поля типа single. Затем получить запись через PRecord(cvGetSeqElem(Results, i)) и использовать как стандартную запись. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано September 1, 2010 О подключении версии 2.0 к билдеру Заменяем в строках с ошибками "Mat_" на "Mat_<_Tp>". Попробовал, проблемы с шаблонами это решает (остается много других ошибок, но они не сложно исправляются). Перспектива есть. Подскажи как исправил)? к примеру у меня в cxcore в строке (2144) FileNode operator -> () const; выдает : cxcore.hpp operator-> must return a pointer or a class еще есть куча ошибок подобных [cxoperations.hpp(: E2316 '_fm_cos' is not a member of 'std' Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 1, 2010 Подскажи как исправил)? к примеру у меня в cxcore в строке (2144) FileNode operator -> () const; выдает : cxcore.hpp operator-> must return a pointer or a class еще есть куча ошибок подобных [cxoperations.hpp(: E2316 '_fm_cos' is not a member of 'std' В своей программе пишем так: #define _STLP_NO_CSTD_FUNCTION_IMPORTS #define _FM_NO_REMAP #include "cv.h" #include "highgui.h"[/code] А заголовочники (не помню какие правил, поэтому все) в архиве:include.rar Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано September 2, 2010 Builder6+OpenCV2 27.12.2009 Здравствуйте. Все вышеперечисленные этапы прошел. Застрял на следующей ошибке (на рисунке) [C++ Error] cxoperations.hpp(107): E2316 '_fm_cos' is not a member of 'std' Аналогичная ошибка. Получилось решить проблему? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 2, 2010 Аналогичная ошибка. Получилось решить проблему? Вроде как эти директивы должна её решать: #define _STLP_NO_CSTD_FUNCTION_IMPORTS #define _FM_NO_REMAP Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано September 3, 2010 #define _STLP_NO_CSTD_FUNCTION_IMPORTS #define _FM_NO_REMAP Да на пустом проекте, все работает и компилируется, но если чуть больше кода то перестает, я думаю что что то не так в этой бибилиотеке http://code.google.com/p/cvblob/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Parallelogramus 0 Жалоба Опубликовано September 8, 2010 IPP существенно (в разы) ускоряющая работу OpenCV хреновина берется с сайта Intel. Ставим интелловский компилятор Intel C Plus Plus Compiler v10.1.025 Google рулит. IPP ставится после установки компилятора. И использует его лицензию Подключается автоматически, нужно только указать в системной переменной Path путь к директории, /bin библиотеки IPP, в самой программе ничего отдельно указывать не нужно. А можно поподробнее? Как я понял из описания, эта библиотека содержит просто оптимизированные под Intel функции. А как ей пользоваться (совместно с OpenCV)? Она работает только с этим интеловским компилятором? И вообще имеет ли смысл с ней заморачиваться на одноядерном процессоре? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 8, 2010 А можно поподробнее? Как я понял из описания, эта библиотека содержит просто оптимизированные под Intel функции. А как ей пользоваться (совместно с OpenCV)? Она работает только с этим интеловским компилятором? И вообще имеет ли смысл с ней заморачиваться на одноядерном процессоре? Да, библиотека оптимизирована под интеловские процессоры, но у меня (я правда использовал её с первой версией) ускоряло очень даже неплохо и на амд-шном проце (двухъядерном). Она работает с любым компилятором, правда в последнюю версию её поддержку нужно встраивать при перестройке бинарников OpenCV (не пробовал). На интелловском одноядерном может и стоит заморочиться на другом думаю нет. Скоро выйдет еще одна версия, в ней планируется поддержка вычислений на граф.карте (GPU), это ускорит некоторые функции намного существеннее чем IPP. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Racer 1 Жалоба Опубликовано September 22, 2010 Здравствуйте, уважаемые. Я только собираюсь изучать OpenCV. я Программирую на Delphi 2 года. Других языков не знаю и учить не планирую. Познания в Delphi неплохие. У меня почему то сложилось впечатление, что о делфистах забыли вообще. Я не смог найти нормальных примеров на этом языке. Прошу у Вас помощи. Если у кого есть поделитесь примерами или статьей. Желательно на русском. И заголовки бы тоже не плохо. Заранее спасибо, надеюсь на Вашу помощь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 22, 2010 Здравствуйте, уважаемые. Я только собираюсь изучать OpenCV. я Программирую на Delphi 2 года. Других языков не знаю и учить не планирую. Познания в Delphi неплохие. У меня почему то сложилось впечатление, что о делфистах забыли вообще. Я не смог найти нормальных примеров на этом языке. Прошу у Вас помощи. Если у кого есть поделитесь примерами или статьей. Желательно на русском. И заголовки бы тоже не плохо. Заранее спасибо, надеюсь на Вашу помощь. Посмотрите здесь: http://www.compvision.ru/forum/index.php?showtopic=64 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Racer 1 Жалоба Опубликовано September 23, 2010 Вечер добрый. глянул ту ссылку. оказалась очень полезной. поставил компоненты и сделал 1 проект. запустил- и о чудо- о великий и могучий синий экран. в чем проблема? делал все по инструкции. и тут чудо такое. пробовал тестить на виртуалке- так не видит камеру, с дровами как всегда на хр проблема))) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
L@MER 6 Жалоба Опубликовано September 23, 2010 Здравствуйте уважаемые форумчане! 1.Вопрос будет ли работать библиотека opencv 2.0 на: Borland C++ Builder 2009, Borland C++ Builder 2010, Borland C++ Builder XE? 2.Есть ли какие либо особенности установки библиотеки на данные программные продукты? 3.Стоит ли вообще заморачиваться и ставить более поздние версии, чем Borland C++ Builder 6 для работы с opencv 2.0 и компьютерным зрением в целом (захват, обработка, распознование видео и статичных изображений)? 4.Какие преимущества есть у более поздних версий BCB? Вопрос не праздный, т.к BCB6 есть в наличие, BCB2009 могу скачать образ, с остальными более проблемно. Заранее благодарен за ответы! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах