Jump to content
Compvision.ru
FormatCft

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

Recommended Posts

Именно так. Дамаете, что идея бредовая? Facedetect я переписал на делфи. Сейчас пробую переписать заголовочные файлы полностью - надеюсь, что терпения хватит. Могу потом выложить, что получится.

Здравствуйте.

А можно исходники переписанного Facedetect?

Мучаюсь уже неделю. cvLoad и cvHaarDetectObjects еще не победил.

Share this post


Link to post
Share on other sites

На другой машине стала загружать каскад при помощи cvLoad.

Однако на мой код постоянно выдает Access violation at 005CE4E4 in libcv200.dll. Read of FFFFFFFF

Как будто пытается достучаться до несуществующего объекта.

Уже половину кода закомментил. То запустишь - работает, то не работает (большую часть времени).

Вот код:

var

  cascade: PCvHaarClassifierCascade;

  capture: PcvCapture;

  image: PIplImage;

  frame, gray: PCvMat;

  frame_, gray_: CvMat;

  s: CvSize;

  storage: pointer;

  faces: PCvSeq;

begin

  s.w:= 30;

  s.h:= 30;

  cascade:= nil;

  capture:= nil;

  image:= nil;

  storage:= nil;

  faces:= nil;


  cascade:= cvLoad(pchar('haarcascade_frontalface_alt.xml'), nil, nil, nil);

  if not bool(cascade) then

  begin

	smsg('ERROR: Could not load classifier cascade');

	exit;

  end;


  {capture:= cvCreateCameraCapture(0);

  if not bool(capture) then

  begin

	smsg('ERROR: Could not create cam capture');

	exit;

  end;

  image:= cvQueryFrame(capture);}


  image:= cvLoadImage(pchar('lena.jpg'), CV_LOAD_IMAGE_UNCHANGED);

  frame:= cvGetMat(image, @frame_, nil, 0);


  //cvNamedWindow('result', 1);

  //cvShowImage('result', frame);


  if bool(frame) then

  begin

	gray:= cvInitMatHeader(@gray_, image^.height, image^.width, CV_8UC1, nil, CV_AUTOSTEP);

	cvCreateData(gray);

	cvCvtColor(frame, gray, CV_BGR2GRAY);

	cvEqualizeHist(gray, gray);

	//storage:= cvCreateMemStorage(0);

	//faces:= cvHaarDetectObjects(gray, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, s);

	//cvShowImage('result', gray);

	//if bool(storage) then cvReleaseMemStorage(@storage);

	//if bool(gray) then cvReleaseMat(@gray);

	//if bool(frame) then cvReleaseMat(@frame);

  end;


  //if bool(image) then cvReleaseImage(@image);

  //cvReleaseCapture(@capture);

end;

Share this post


Link to post
Share on other sites

А нельзя в паскале что то типа этого написать, вместо плясок с матрицами? (я просто не пробовал на паскале)

img = cvLoadImage("OpenCv.jpg");

gray = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);

cvCvtColor(img, gray, CV_BGR2GRAY); // Получаем серый цвет

Share this post


Link to post
Share on other sites

В принципе да. Но, все равно глюки.

Вот это работает

image:= cvLoadImage(pchar('lena.jpg'), 1);

  gray:= cvCreateImage(cvSize_(image^.width, image^.height), 8, 1);

  cvCvtColor(image, gray, CV_BGR2GRAY);
А вот это уже выдает ошибку
 image:= cvLoadImage(pchar('lena.jpg'), 1);

  gray:= cvCreateImage(cvSize_(image^.width, image^.height), 8, 1);

  cvCvtColor(image, gray, CV_BGR2GRAY);

  cvEqualizeHist(gray, gray);

Такое чувство что cvCvtColor еще работает с данными, а cvEqualizeHist уже пытается получить к ним доступ. Но ведь так не должно быть.

Share this post


Link to post
Share on other sites

Решил проблему довольно просто.

Использую версию 1.0. Вторая просто глючная ...

Share this post


Link to post
Share on other sites

Иногда, когда не получается, полезно читать readme.

Библиотеки во второй версии собраны под MinGW. Собрал в Visual Studio 2008 и теперь все работает.

Share this post


Link to post
Share on other sites

Тоже не выгружаются многие аппликухи, использующие OpenCV.

Причем, есть два компьютера (оба Win XP): на одном все корректно завершается, на другом - остаются "призраки". Не выгружается на втором даже большинство OpenCVшных самплов.

За прошедшее с последнего сообщения время никто проблему так и не решил?

Share this post


Link to post
Share on other sites
Тоже не выгружаются многие аппликухи, использующие OpenCV.

Причем, есть два компьютера (оба Win XP): на одном все корректно завершается, на другом - остаются "призраки". Не выгружается на втором даже большинство OpenCVшных самплов.

За прошедшее с последнего сообщения время никто проблему так и не решил?

Сталкивался с таким поведением, когда камера не останавливала свою работу корректно.

При этом: не запускались другие приложения, лампочка на камере светилась, процессы застревали в памяти, помогала только холодная перезагрузка.

Отсюда предложение, может перед завершением приложения надо подождать отключения камеры?

Share this post


Link to post
Share on other sites
Сталкивался с таким поведением, когда камера не останавливала свою работу корректно.

При этом: не запускались другие приложения, лампочка на камере светилась, процессы застревали в памяти, помогала только холодная перезагрузка.

Отсюда предложение, может перед завершением приложения надо подождать отключения камеры?

Не, такая фигня происходит с совершенно разными Open CV приложениями (родными примерами), в т.ч. и не использкющими камеру.

А в своей собственной программе я получаю такую же проблему даже просто добавив инклуды OCVшных хедеров. Вообще не вызывая из них ничего.

Причем, до закрытия программа функционирует совершенно нормально, и после попытки закрытия "подвисший призрак" ничуть не мешает запуску и работе других аппликух - в т.ч. и запуску других копий этой же. Что с камерой - что без. Никаких явных сбоев, кроме того, что остается лишний процесс, жрущий ~10 метров памяти.

И это только на одном компе, на другом - все ОК. Вот только запустить в результате надо на том, на котором не ОК :)

Share this post


Link to post
Share on other sites
Не, такая фигня происходит с совершенно разными Open CV приложениями (родными примерами), в т.ч. и не использкющими камеру.

А в своей собственной программе я получаю такую же проблему даже просто добавив инклуды OCVшных хедеров. Вообще не вызывая из них ничего.

Причем, до закрытия программа функционирует совершенно нормально, и после попытки закрытия "подвисший призрак" ничуть не мешает запуску и работе других аппликух - в т.ч. и запуску других копий этой же. Что с камерой - что без. Никаких явных сбоев, кроме того, что остается лишний процесс, жрущий ~10 метров памяти.

И это только на одном компе, на другом - все ОК. Вот только запустить в результате надо на том, на котором не ОК :)

А если ему дать задание на самоубийство: после завершения послать процессу WM_CLOSE, если не поможет то через TerminateProcess.

Мне не проверить предположение, у меня все очищается и так.

И еще, какие точно версии WindowsXP стоят на одном (где все очищается) и на другом (на котором нет)?

Можно ли убить призрак через диспетчер задач?

Share this post


Link to post
Share on other sites

Народ помогите!Я пытаюсь поставить OpenCV2.0 и Borland C++ Builder и запустить какой нить проект.. но ниче не выходит.. Builder то не находит библиотеки то выскакивают какие то ошибки.. Пожалуйста напишите подробную инструкцию по установке.. Заранее благодарен...

Share this post


Link to post
Share on other sites
Народ помогите!Я пытаюсь поставить OpenCV2.0 и Borland C++ Builder и запустить какой нить проект.. но ниче не выходит.. Builder то не находит библиотеки то выскакивают какие то ошибки.. Пожалуйста напишите подробную инструкцию по установке.. Заранее благодарен...

Тема есть здесь:

http://www.compvision.ru/forum/index.php?showtopic=64

Подробнее уже не очень помню. Но вроде делал так:

0) Надо установить MSVCR.

1) Собрал dll-ки и lib-ы под VS2008 при помощи CMAKE.

2) Сконвертировал (lib-ы) при помощи libconverter-a где то на форуме валяется. Можно использовать стандартный борландовский COFF2OMF.exe из командной строки.

3) Поправил заголовочники под Borland-овский компилятор (файлы которые у меня получились лежат в топике, упомянутом выше.).

4) Подключить библиотеки к проекту так же как и для OpenCV 1.1.

У некоторых (или у многих, процент не знаю) возникают проблемы с файлами (Lib, dll) моей сборки, так что первый пункт лучше сделать самостоятельно.

PS: А каких библиотек не хватает? Там часть можно отключить типа jpeg,png.... и т.д.

Share this post


Link to post
Share on other sites

Я попробовал скачал по твоей ссылке VisionLab. Поставил.. Запускаю пример..Пишет что не может найти VLAVIPlayer.PAS файл. Я так пробовал и в билдере и делфи. Одна и таже ошибка. У кого нить нормально поставились и заработали эти компоненты? Как мне это исправить?

Share this post


Link to post
Share on other sites
Я попробовал скачал по твоей ссылке VisionLab. Поставил.. Запускаю пример..Пишет что не может найти VLAVIPlayer.PAS файл. Я так пробовал и в билдере и делфи. Одна и таже ошибка. У кого нить нормально поставились и заработали эти компоненты? Как мне это исправить?

Извиняюсь, ошибся со ссылкой :).

Вот здесь надо смотреть:

http://www.compvision.ru/forum/index.php?showtopic=202

А что касается VisionLab, и других компонентов в билдере, надо указать (проверить) пути к библиотекам в свойствах проекта (в 6 - м билдере пути обычно урезаются по умолчанию и он сам потом не может найти файлы).

Share this post


Link to post
Share on other sites

Пишу в коде:

f=fopen(filename,"w");

fprintf(f,"%s",str);

Компиляция - успешно.

Запускаю - требует haartraining.dll.

Смотрю haartraining.lib - действительно, есть упоминание про обе этих функции. Пробую удалять библиотеку - ругается.

Может кто-то сталкивался и знает что можно сделать?

Честно говоря не очень понимаю, зачем нужно было в haartraining такое писать - stdio.h это же святое! :)

Share this post


Link to post
Share on other sites

В билдере тоже ругается, но если из проекта удалить все лишние lib файлы, включая haartraining.lib, то ошибка пропадает.

У меня к проекту обычно подключены:

cv200.lib

cvaux200.lib

cvcore200.lib

cxtx200.lib

highgui200.lib

ml200.lib

opencv_ffmpeg200.lib

И компилируется без проблем.

Share this post


Link to post
Share on other sites

Спасибо. Получилось.

Я тоже в билдере работаю. Помогла фраза "если из проекта удалить". Не часто подключаю сторонние библиотеки, забыл что нужно нажать Project->Remove from project. До этого то пытался просто файл haartraining.lib удалить :)

Share this post


Link to post
Share on other sites

Вылезла проблема, не загружаются классификаторы:

procedure TForm1.Button1Click(Sender: TObject);

var img : PIplImage;

file1 : PChar;

file2 : PChar;

begin

file1 := 'haarcascade_frontalface_alt.xml';

file2 := 'haarcascade_eye.xml';

cascade_f := cvLoad(file1,0,0,0);

cascade_e := cvLoad(file2,0,0,0);

...

cascade_f и cascade_е остаются nil

Share this post


Link to post
Share on other sites
Вылезла проблема, не загружаются классификаторы:

procedure TForm1.Button1Click(Sender: TObject);

var img : PIplImage;

file1 : PChar;

file2 : PChar;

begin

file1 := 'haarcascade_frontalface_alt.xml';

file2 := 'haarcascade_eye.xml';

cascade_f := cvLoad(file1,0,0,0);

cascade_e := cvLoad(file2,0,0,0);

...

cascade_f и cascade_е остаются nil

В посте №16 вреде все загружается: http://www.compvision.ru/forum/index.php?s...dpost&p=949

Share this post


Link to post
Share on other sites
Вылезла проблема, не загружаются классификаторы:

procedure TForm1.Button1Click(Sender: TObject);

var img : PIplImage;

file1 : PChar;

file2 : PChar;

begin

file1 := 'haarcascade_frontalface_alt.xml';

file2 := 'haarcascade_eye.xml';

cascade_f := cvLoad(file1,0,0,0);

cascade_e := cvLoad(file2,0,0,0);

...

cascade_f и cascade_е остаются nil

а если так:

file1 := PChar('haarcascade_frontalface_alt.xml');

cascade_f := cvLoad(file1,0,0,0);

Share this post


Link to post
Share on other sites

Все нормально, там просто все очень критично с путями. Я каскады засунул в одноименную папку (для чистоты :)) и обращаюсь к ним таким вот образом:

c_path := ExtractFilePath(ParamStr(0))+'cascades\';

f1 := c_path+'haarcascade_frontalface_alt.xml';

file1 := PChar(f1);

cascade_f := cvLoad(file1,0,0,0);

Вот, если кому интересно - проэкт на делфи, который находит лица, глаза, нос и рот.

Напоминаю: для успешной работы в папке должна быть бибилиотека VCOpenCV.dll

OCV.ZIP

Share this post


Link to post
Share on other sites

Пишу в CodeGear C++ Builder 11.0. При компиляции выскакивают ошибки:

[iLINK32 Error] Error: Unresolved external '_cvCreateCameraCapture' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvInitFont' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvGrabFrame' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvRetrieveFrame' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvCreateImage' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvCopy' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvCloneImage' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvConvertScale' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvMerge' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvGetRawData' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvReleaseImage' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '__fastcall TForm1::FormCreate(System::TObject *)' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '__fastcall TForm1::Image1Click(System::TObject *)' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

[iLINK32 Error] Error: Unresolved external '_cvReleaseCapture' referenced from C:\DOCUMENTS AND SETTINGS\TTL-+T+г\¦+L -+¦L¦+=T-\RAD STUDIO\PROJECTS\PROGECTFIRSTTEST\DEBUG\UNIT1.OBJ

Что посоветуете? Заранее спасибо!

Share this post


Link to post
Share on other sites

Надо подключить библиотеки (.lib) к проекту.

Share this post


Link to post
Share on other sites

Все, разобрался! Только возникает другой вопрос: пытаюсь загрузить картинку с помощью команды frame = cvLoadImage("img.jpg",1), но содержимое frame = NULL?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×