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

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

Recommended Posts

Может русские буквы и пробелы в названиях директорий мешают?

Переместил проект в корень (также исключил русские буквы и пробелы) - таже ерунда...

Да и использовал тот код который написан выше в вашем проекте - все функции, которые относятся к opencv компилятор пропустил а вот две относящиеся к библиотеке myCV снова забраковал - ошибки те-же что и описаны выше. Библиотека эта состоит из двух файлов h и cpp соответственно. В общем засада какая то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Переместил проект в корень (также исключил русские буквы и пробелы) - таже ерунда...

Да и использовал тот код который написан выше в вашем проекте - все функции, которые относятся к opencv компилятор пропустил а вот две относящиеся к библиотеке myCV снова забраковал - ошибки те-же что и описаны выше. Библиотека эта состоит из двух файлов h и cpp соответственно. В общем засада какая то...

А myCV.CPP-шный файл к проекту подключен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А myCV.CPP-шный файл к проекту подключен?

Спасибо за ответы. Это я натуральный блин сегодня ламер, короче я уже до этого поста догадался, что я чего-то недоделываю (давно к теме компзрения не касался) и ТОЧНО, вы совершенно правы - подключил библиотеку myCV и openCV через ADD Library в билдере и все в моем проекте заработало и завертелося! Еще раз спасибо и звиняйте что такой ерундой мозг сносил и себе и вам:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Воспользовался следующей морфологией,но потери слишком большие,как их можно уменьшить:


//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

потери большие...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доработал свою программу.Результатом удовлетворен на все 100!

Особая благодарность Nuzhny,направил на путь истины!Большущее тебе спасибо! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

выложите код, интересно посмотреть.

какие то ограничения есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответы. Это я натуральный блин сегодня ламер, короче я уже до этого поста догадался, что я чего-то недоделываю (давно к теме компзрения не касался) и ТОЧНО, вы совершенно правы - подключил библиотеку myCV и openCV через ADD Library в билдере и все в моем проекте заработало и завертелося! Еще раз спасибо и звиняйте что такой ерундой мозг сносил и себе и вам:)

Выложи плиз конечный готовый проект как для примера(со всеми хедерами и библиотеками). Мне уж очень необходимо из билдера достучаться до opencv 2.1 или 2.2. Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Много уважаемые форумчане, достаточно долго я искал, как мне сопрячь мой Builder c++ и библиотеку openCV, пересмотрел кучу материалов, и все сходятся примерно в одном и том же мелкой корректировке хидер-файлов, и переводе либов в понятные билдеру, нельзя ли как-нибудь автоматизировать данный процесс , по скольку и новичку въехать в установку достаточно сложно, да и не новичку придётся не мало потратить времени. Как бы я бы и сам мог бы приступить к ваянию архивов с установочными батниками, если бы разобрался более подробнее в данном материале. В общем хотелось бы увидеть подробную инструкцию по установки библиотеки под билдер.

Заранее всем благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

lib файлы компилировать нужно в MSVS, затем нужно их сконвертировать в понятный для билдера формат тулзой COFF2OMF.

"Мелкая" корректировка проводится так:


label1: Пытаемся компилировать проект;
if(Получаем сообщения об ошибках){ Исправляем ; }else{goto Enjoy; }
goto label1;
Enjoy:[/code]

Ошибки, в основном, возникают из-за разной интерпретации шаблонов.

Бороться с ошибками можно по аналогии с тем, как я сделал для версии 2.1

В теме по HMM на второй странице.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет!

У кого есть дистрибутив или инстркция по установке OpenCV на С++ Builder 2010. Я видел тему по установке на C++ Builder 6, но не получается перенести его на 2010...

В прикрепленном архиве проект для C++ builder 2007. Я его так и не смог запустить..

TestOCV.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я уже давно слез с билдера и перешел на студию. Чего и Вам советую.

Что касается запуска opencv на борландовских компиляторах, то на форуме лежали заголовочные файлы для версии 2.2.

Да и тема с запуском под 2007-2009 БДС была, посмотрите здесь. Я запускал по той же методике что и для билдера 6.

При компиляции в билдере, в основном возникают проблемы с шаблонами. Исправление не сложное, но очень объемное.

Плюс скорее всего в билдере не будет поддержки CUDA, хотя в этом не уверен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я уже давно слез с билдера и перешел на студию. Чего и Вам советую.

Что касается запуска opencv на борландовских компиляторах, то на форуме лежали заголовочные файлы для версии 2.2.

Да и тема с запуском под 2007-2009 БДС была, посмотрите здесь. Я запускал по той же методике что и для билдера 6.

При компиляции в билдере, в основном возникают проблемы с шаблонами. Исправление не сложное, но очень объемное.

Плюс скорее всего в билдере не будет поддержки CUDA, хотя в этом не уверен.

Что ж... Именно так я и сделаю... на следующем проекте. Если честно достал Багланд со своими глюками... Одни утечки памяти чего стоят... Но все таки надо доделать текущий проект, который практически закончен на Buildere...

Кстати, попутный вопрос (а то может я зря парюсь). Возможно ли в openCV работать с 16-битным монохромным RAW, и изменять ему яркость и контрастность (мне больше ничего не надо отттуда)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какие-то проблемы с 16-битным монохромным RAW у меня были, но точно не вспомню на каких функциях. То ли Лапласиан не хотел считать, то ли ещё что-то. Я думаю, что такие вещи гораздо проще сделать самому, посмотрев исходники OpenCV. Алгоритм просто: строится гистограма, по ней look up table и меняется значение каждого пикселя. Проблем с настройкой OpenCV будет больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Алгоритм просто: строится гистограма, по ней look up table и меняется значение каждого пикселя. Проблем с настройкой OpenCV будет больше.

Пример в студию. Дело в том, что я, видимо, чего-то в этом деле не понимаю. У меня алгоритм такой: (по яркости) к исходному raw буферу (массив short) к каждому пикселю прибавляется значение яркости. Далее этот массив урезается до 8 бит. Далее уже 8-битные значения попиксельно превращаются в TBitmap, затем все это дело уже помещается в элемент отображения... И так каждый шаг. По контрастности еще сложнее... HELP кто может подсказать решение....

Что касается LUT, то тут хотелось бы поподробнее услышать. Я плохо себе представляю, как их использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Запусти пример demhist из OpenCV. Всё станет ясно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребят, а вы могли бы подготовить какой-нибудь автоматический установщик OpenCV 2.0 для Builder C++ 6.0, чтобы не париться с его установкой, как не пробовал его поставить для захвата видео изображения с веб камеры, ни как не выходит.

Заранее благодарен!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да здесь собственно и установки никакой нет. Подключайте либы, dll в директорию с программой, пропишите путь к заголовочникам. Правленные файлы прилагаются. Править для последних версий мне очень лень, пересел на MSVS.

Dlls2_0.rar

include2_0.rar

libs2_0bcb.rar

simple2_0.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Э-э-э-э-э ну тогда у меня не получется пример собрать, позже подробнее опишу проблему...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при сборки примера оно всё компилируется,но при запуске приложение получаю "Ошибка при инициализации приложения (0х0150002). Для выхода из приложения нажмите "ОК". ";

понятное дело вылазит в строчке Application->CreateForm(__classid(TForm1), &Form1); но при первом изучении текста криейта там нет, из-за чего это может быть???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при сборки примера оно всё компилируется,но при запуске приложение получаю "Ошибка при инициализации приложения (0х0150002). Для выхода из приложения нажмите "ОК". ";

понятное дело вылазит в строчке Application->CreateForm(__classid(TForm1), &Form1); но при первом изучении текста криейта там нет, из-за чего это может быть???

надо установить MSVCR. Вроде 2005, но может и 2008. Не помню точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

устанока Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package ATL Security Update ничего не дала ща попробую 2008 если найду

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

перезагрузить комп еще нужно после установки.

Не нужно его искать:

msvcrt2008: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29

msvcrt2005: http://www.microsoft.com/download/en/details.aspx?id=3387

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребята, с талкивались с такой проблемой: втавляю два одинаковых устройства , а сигнал он берёт только почему-то от одного из любых двух устройств (хотя раньше забирал с двух устройств одновременно) :-\

capture = cvCaptureFromCAM(0 );

capture1 = cvCaptureFromCAM(1 );

// причём если добавить capture2 = cvCaptureFromCAM(2); и так далее, ещё находятся какие-то устройства, некоторые элементы равны значению NULL (ну по всей видимости их нет просто),

....



    if( capture )

    {

            if( !cvGrabFrame( capture ))

                goto skip;

            frame = cvRetrieveFrame( capture );

            if( !frame )

                goto skip;

            if( !frame_copy )


                 frame_copy = cvCreateImage( cvSize(frame->width ,frame->height),

                                            IPL_DEPTH_8U, frame->nChannels );


            if( frame->origin == IPL_ORIGIN_TL )

                cvCopy( frame, frame_copy, 0 );

            else

                cvFlip( frame , frame_copy, 0 );


            ProcessFrame( frame_copy,1 );

    }


    if( capture1 )

    {

            if( !cvGrabFrame( capture1 ))

                goto skip;

            frame = cvRetrieveFrame( capture1 );

            if( !frame )

                goto skip;

            if( !frame_copy )

                frame_copy = cvCreateImage( cvSize(frame->width,frame->height),

                                            IPL_DEPTH_8U, frame->nChannels );

            if( frame->origin == IPL_ORIGIN_TL )

                cvCopy( frame, frame_copy, 0 );

            else

                cvFlip( frame, frame_copy, 0 );


            ProcessFrame( frame_copy,2 );

    }

Где собака здесь зарыта ??? :bow:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно попробовать frame_copy1 и frame_copy2 ввести. Может быть он перезаписывает кадр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется, что это проблема где-то в определении устройств : capture = cvCaptureFromCAM(0); capture1 = cvCaptureFromCAM(1); , вероятно толи не теуказатели получаю, толи их не так как-то получаю :-\

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×