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

Smorodov

Главные администраторы
  • Количество публикаций

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

  • Посещение

  • Days Won

    346

Сообщения, опубликованные пользователем Smorodov


  1. Что нам даст запись по x, y?

    По моему это не вариант... К примеру на рисунке 2 объекта, или более, взяли мы первые 4 кадра и обработали

    как нам узнать где на следующих 4 кадрах, находится каждый из этих объектов.

    По просту говоря нужно составить массив CvRect для каждого объекта, это и будет его путь.

    Конечно, если нам надо отслеживать несколько объектов, то можно запоминать где какие объекты в последний раз были и их скорости, если мы знаем скорости, то мы примерно можем прикинуть, где ожидать появления этого объекта на следующем кадре.

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

    Естественно нужен фильтр, т.к. может быть много помех.

    Фильтровать можно по положению и скорости (тоже меняется не мгновенно), если знать направление и величину скорости, то если объект отклонился больше чем на значение заданного порогового значения, его не учитывать (или считать новым объектом).

    Неплохо работает в таких случаях фильтр Калмана.


  2. Спасибо)) Классный пример!

    Возник вопрос...

    Эта программа после обработки каждых 4 кадров, возвращает нам CvRect,

    Есть ли какой ни будь достаточно простой способ, узнать всю траеткторию движения объекта?

    То есть проследить его путь.

    682ca71b8348.gif

    // при первом проходе присвоить X и Y равными x и y а дальше по циклу.

    // Центр прямоугольника

    x = comp_rect.x + comp_rect.width/2;

    y= comp_rect.y + comp_rect.height/2;

    // Вектор скорости

    vx = cvRound( magnitude*cos(angle*CV_PI/180));

    vy = cvRound( magnitude*sin(angle*CV_PI/180));

    X+=vx;

    // Ось перевернута

    Y-=vy;

    Можно просто x и y записывать (правда может не очень точно получится), зато ошибка копиться не будет.


  3. Странно вот что:

    totalPeople 0 int

    totalFaces 0 int

    _A_SUBDIR error: identifier '_A_SUBDIR' out of scope

    Это не может означать что просто фотки не загружены?

    Можно проверить значения элементов массива IplImage **images в функции Train на значение отличное от NULL.


  4. Можно попробовать заменить этот цикл

    		for( j = 0; j < numImages; j++ )
    {
    //////////////////////////////////////////////////////////////////////////////////
    // вылетает во время выполнения следующей строки
    cvEstimateObsProb( obsInfoVec[ j ], tmplEhmm );
    //////////////////////////////////////////////////////////////////////////////////
    likelihood += cvEViterbi( obsInfoVec[ j ], tmplEhmm );
    }[/code] на
    [code]//////////////////////////////////////////////////////////////////////////////////
    // вылетает во время выполнения следующей строки
    cvEstimateObsProb( obsInfoVec[ 0 ], tmplEhmm );
    //////////////////////////////////////////////////////////////////////////////////
    likelihood += cvEViterbi( obsInfoVec[ 0 ], tmplEhmm );

    и посмотреть будет-ли вылетать, если не будет, значит проблема с количеством элементов массива obsInfoVec, если будет, значит проблема с созданием элементов массива obsInfoVec.

    tmplEhmm - используется и ранее по программе, и проблем вроде не вызывает.

    И неплохо бы брейкпоинт поставить на эту строчку и посмотреть чему переменные равны.

    Или printf-ом их в консоль вывести попытаться.

    ЗЫ: Ответы умозрительные, VS сейчас не установлен, проверить не могу.


  5. После предыдущей ошибки появилась сразу следующая. Программа всегда вылетает на вот этой строке

    <!--shcode--><!--shcode--><pre><code class='no-highlight'>cvEstimateObsProb( obsInfoVec[ j ], tmplEhmm );</code></pre><!--ehcode--><!--ehcode-->

    Бьюсь несколько дней над этой проблемой. Ничего не могу сделать. Пробовал как с этим исходником, так и с исходником, с которого был сделан этот исходник. Использую Visual Studio 2008. Делал как в C++, так и в С++/CLI. Ничего не работает. Документация по OpenCV не помогает. Если у вас есть время, то помогите пожалуйста. Очень интересно все-таки разобраться с этим методом.

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

    Что должны представлять собой аргуенты можно посмотреть здесь: Eigen Objects (PCA) Functions

    Настройки VS2008 можно посмотреть здесь (то что касается Opencv): http://www.compvision.ru/forum/index.php?showtopic=95


  6. хм... что то не понял( видимо этот код подходит для CvRect, но у CvBox2D немного другая структура...

    Я так понимаю что x,y задают центр прямугольника, а не верхний левый угол.

    В общем вот функция, может кому тоже пригодится :)

    void PaintBox2D(IplImage* img, CvBox2D box, CvScalar color,

    int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8),

    int shift CV_DEFAULT(0))

    {

    CvPoint2D32f box_vtx[4];

    cvBoxPoints(box, box_vtx);

    CvPoint pt0, pt;

    pt0.x = cvRound(box_vtx[3].x);

    pt0.y = cvRound(box_vtx[3].y);

    for(int i = 0; i < 4; i++ )

    {

    pt.x = cvRound(box_vtx.x);

    pt.y = cvRound(box_vtx.y);

    cvLine(img, pt0, pt, color, thickness, line_type, shift);

    pt0 = pt;

    }

    }

    Спасибо, эту весьма удобную ф-цию сразу не заметил.

    cvBoxPoints определена так:

    void cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] )

    {

    float a = (float)cos(box.angle)*0.5f;

    float b = (float)sin(box.angle)*0.5f;

    pt[0].x = box.center.x - a*box.size.height - b*box.size.width;

    pt[0].y = box.center.y + b*box.size.height - a*box.size.width;

    pt[1].x = box.center.x + a*box.size.height - b*box.size.width;

    pt[1].y = box.center.y - b*box.size.height - a*box.size.width;

    pt[2].x = 2*box.center.x - pt[0].x;

    pt[2].y = 2*box.center.y - pt[0].y;

    pt[3].x = 2*box.center.x - pt[1].x;

    pt[3].y = 2*box.center.y - pt[1].y;

    }


  7. Да структура) Она представляет собой прямоугольник, повернутый на определенный угол.

    Вот этот прямоугольник и нужно как то нарисовать..

    Берем координаты углов относительно центра прямоугольника в неповернутом, несмещенном состоянии.

    Поворачиваем относительно центра, и затем смещаем.

    for (int i=0;i<4;i++)

    {

    x1=x0*cos(phi)+y0*sin(phi)+dx;

    y1=-x0*sin(phi)+y0*cos(phi)+dx;

    }

    // sin и cos можно (лучше) посчитать заранее

    // phi - угол поворота (радианы), dx, dy - смещение

    // x0,y0 - координаты углов относительно центра прямоугольника

    // x0,y0 - координаты повернутой и смещенной угловой точки

    // дальше рисуем линиями


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

    Начинаю изучать OpenCV. Судя по всему, замечательная библиотека. Однако, ее применение немного осложняется довольно сложными форматами входных параметров.

    Например, я пока не понял, как можно работать с функциями библиотеки, если у меня нет не только файла с изображением, имя которого надо передать в cvLoadImage, но и даже самого изображения в одном из понимаемых форматов (jpg, gif, ...), а есть, скажем, только матрица значений яркости (grayscale)?

    Есть ли возможность сконвертировать двумерный массив в IplImage?

    IplImage *_Grab3=0;  // Указатель на структуру

    // Выделяем память кол-во слоев 3 (RGB), байты так и идут RGB (или GBR не помню).

    // Если надо однослойное (серое), то последний аргумент 1

    // Усли надо с плавающей точкой, то предпоследний аргумент CV_32FC1 и т.д.

    _Grab3 = cvCreateImage( cvSize(_Grab->width,_Grab->height),IPL_DEPTH_8U,3);

    // Получаем указатель на данные

    unsigned char* data;

    cvGetRawData(_Grab3, (uchar**)&data);

    // Копируем данные при помощи memcpy, например

    // Выводим картинку


  9. Спасибо за туториал!

    Я думаю для кроссплатформенной работы со звуком PortAudio подойдёт.. хотя не работал с ним ещё. Только выполнил пару примеров снятия микрофонного звука и проигрывания его.. работает :)

    Здесь куча литературы по распознаванию речи:

    http://gladkos.livejournal.com/970.html


  10. Вобщем такой вопрос :

    Как отмаштабировать изоброжение в OpenCV???

    Например у меня есть изоброжение с размером 640x480 и нужно получить изоброжение с другим масштабом ?????

    Можно так:

    // Выделяем память под копию кадра
    if( !frame_copy ) { frame_copy = cvCreateImage( cvSize(352,288),IPL_DEPTH_8U, frame->nChannels );}
    // Масштабируем под заданный размер
    cvResize( frame, frame_copy, CV_INTER_LINEAR );[/code]


  11. DBL_MAX - максимально возможное число типа double, по моему стандартная.

    А функция вычисляет минимальную дистанцию между векторами (помнится по Махаланобису (Mahalanobis distance), т.к. делим на собств. число.).

    Я думаю, что единственный путь, определить что фото нет в базе, это контролировать расстояние между существующими

    в базе векторами и поступившим на вход. Если расстояние превышает определенный порог, считать что её нет в базе.

    Существуют методы, на основе собственных лиц, работающие на бесконечном множестве фотографий,

    я их подробно не смотрел, но возможно они вам подойдут больше.


  12. Спасибо за примерчик :)

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

    Посмотрел доки, попробую рассказать что понял.

    Назначение функции:

    Каждому пикселю исходной картинки с координатами (x,y), ставится в соответствие пиксель

    результирующего изображения с координатами (mapx(x,y),mapy(x,y)).

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

    Так как тип элемента (mapx(x,y),mapy(x,y)) - 32fC1, то

    для получения значения результирующего пикселя используется интерполяция (у Вас она линейная).

    Последний аргумент функции - цвет заполнения областей, которые, в результате выполненного преобразования остались

    незатронутыми.


  13. Smorodov спасибо за ответ.

    С детектором лиц и других частей лица я разобрался.

    У меня теперь другой вопрос:

    Как сравнивать два лица ? Может быть в OpenVC существуют какие ни будь функции для сравнения изображений ?

    Сравнению лица с набором фоторграфий (поиску по фото) посвящены как раз 2 и третья ссылки из моего предыдущего поста.

    А именно:

    метод главных компонент. Более простой и потому распространен больше, однако достаточно чувствителен к геометрическим искажениям изображения.

    Теория обсуждалась здесь: http://www.compvision.ru/forum/index.php?showtopic=71

    метод скрытых марковских моделей (с моей точки зрения, более точный и надежный).

    Сделан на основе примера, ответы на некоторые вопросы для меня еще не очевидны (например, выбор начений некоторых параметров),

    что понял - откомментировал.

    Это, как я понял (прогуглив тему), два из наиболее распространенных методов, применяемых при сравнении изображений, вернее вычислении степени

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

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


  14. Всем привет! Есть код:

    void PyrSegment( 
    IplImage* src,
    IplImage* dst
    ) {
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvSeq* comp = NULL;

    cvPyrSegmentation( src, dst, storage, &comp, 4, 200, 50 );
    int n_comp = comp->total;

    for( int i=0; i<n_comp; i++ ) {
    CvConnectedComp* cc = (CvConnectedComp*) cvGetSeqElem( comp, i );
    do_something_with( cc );
    }
    cvReleaseMemStorage( &storage );
    }
    ...

    IplImage *image = cvLoadImage("1.jpg");
    IplImage *out = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);

    PyrSegment(image, out);[/code] Взял из книжки на строке с cvPyrSegmentation выдает ошибку has a bad argument, какие же ей аргументы передовать? Вот работающий пример сегментации из папки opencv/examples/c:
    [code]#ifdef _CH_
    #pragma package <opencv>
    #endif

    #ifndef _EiC
    #include "cv.h"
    #include "highgui.h"
    #include <math.h>
    #endif

    IplImage* image[2] = { 0, 0 }, *image0 = 0, *image1 = 0;
    CvSize size;

    int w0, h0,i;
    int threshold1, threshold2;
    int l,level = 4;
    int sthreshold1, sthreshold2;
    int l_comp;
    int block_size = 1000;
    float parameter;
    double threshold;
    double rezult, min_rezult;
    CvFilter filter = CV_GAUSSIAN_5x5;
    CvConnectedComp *cur_comp, min_comp;
    CvSeq *comp;
    CvMemStorage *storage;

    CvPoint pt1, pt2;

    void ON_SEGMENT(int a)
    {
    cvPyrSegmentation(image0, image1, storage, &comp,
    level, threshold1+1, threshold2+1);

    /*l_comp = comp->total;

    i = 0;
    min_comp.value = cvScalarAll(0);
    while(i<l_comp)
    {
    cur_comp = (CvConnectedComp*)cvGetSeqElem ( comp, i );
    if(fabs(255- min_comp.value.val[0])>
    fabs(255- cur_comp->value.val[0]) &&
    fabs(min_comp.value.val[1])>
    fabs(cur_comp->value.val[1]) &&
    fabs(min_comp.value.val[2])>
    fabs(cur_comp->value.val[2]) )
    min_comp = *cur_comp;
    i++;
    }*/
    cvShowImage("Segmentation", image1);
    }

    int main( int argc, char** argv )
    {
    char* filename = argc == 2 ? argv[1] : (char*)"fruits.jpg";

    if( (image[0] = cvLoadImage( filename, 1)) == 0 )
    return -1;

    cvNamedWindow("Source", 0);
    cvShowImage("Source", image[0]);

    cvNamedWindow("Segmentation", 0);

    storage = cvCreateMemStorage ( block_size );

    image[0]->width &= -(1<<level);
    image[0]->height &= -(1<<level);

    image0 = cvCloneImage( image[0] );
    image1 = cvCloneImage( image[0] );
    // segmentation of the color image
    l = 1;
    threshold1 =255;
    threshold2 =30;

    ON_SEGMENT(1);

    sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", &threshold1, 255, ON_SEGMENT);
    sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation", &threshold2, 255, ON_SEGMENT);

    cvShowImage("Segmentation", image1);
    cvWaitKey(0);

    cvDestroyWindow("Segmentation");
    cvDestroyWindow("Source");

    cvReleaseMemStorage(&storage );

    cvReleaseImage(&image[0]);
    cvReleaseImage(&image0);
    cvReleaseImage(&image1);

    return 0;
    }

    #ifdef _EiC
    main(1,"pyramid_segmentation.c");
    #endif


  15. Vicul книгу не обязательно читать всю !!!

    Достаточно прочитать несколько первых глав и изучить основы OpenCV

    Гораздо большая проблема состоит в том чтобы найти и изучить интересующую тему т.к. весь материал написан на английском!

    У меня ещё такой вопрос: Объясните что такое cascade в OpenCV????

    И для чего он используется ?

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

    Насколько я понимаю, в книжке, о которой вы говорите достаточно много неточностей. Я думаю что лучше опираться не только на эту книжку, но и на руководство по OpenCV. Они лежат на форуме в топике "официальное руководство по OpenCV".

    Что касается распознавания лиц то вот подборка ссылок:

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

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

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

    И описание: метод главных компонент

    обучение каскадов Хаара


  16. С IPP еще не работал, но думаю без этого пакета не обойтись. Поэтому интересно, как вы передаете все это заказчику. Скажем если прога на писана на MSVC++, здесь проблем нет - лицензия моя и все ехе-шники будут легальны. С OpenVC тоже проблем нет - пакет распостраняется свободно. А как быть с IPP? Я слышал, что это пакет уже коммерческий, и заказчику необходимо его покупать? Вопрос с лицензиями у меня один из основных, потому что клиенты у меня "из-за бугра".

    IPP хорошая штука, 1 коммерческая лицензия стоит 200$ но если Вы её используете, то вряд ли Ваш продукт стоит меньше 2000$ - 3000$, так что здесь, как раз большой проблемы нет, причем если нужно несколько лицензий Вам дают какие то скидки.

    Вот ссылка на страничку с ценами: страничка с ценами


  17. А если DLL-ки засунуть в инстал-пак приложения и и бросать их в папку приложения при сетапе, никто не пробовал? Или все таки OpenCV требует некоторых изменений в реестре, при установке этого пакета?

    Так можно сделать, в версии 1.0 надо было еще видеофильтры зарегистрировать, там есть bat файл специальный. А в 1.1 я такого не нашел, наверное теперь не нужно ничего регистрировать. Единственное что, IPP работать так скорее всего не будет. И MSVCR надо не забыть.


  18. Всем привет,

    прошу прощения за глупый вопрос. Подключить Visual C++ к OpenCV проблем нет, вопрос в другом - предположим, апп готово и его необходимо передать к заказчику, возможно ли сделать статическое апп, которое уже включало в себе все нужные библиотеки OpenCV, т.е. чтобы заказчику не нужно было устанавливать OpenCV? Или все таки необходимо поставлять апп с dll-ками OpenCV?

    существуют трюки, при помощи которых можно впаять dll в exe- шник, правда , скорее всего попыхтеть придется. Есть еще вариант - тулза dll2lib по моему называется может быть она поможет сам правда ее не тестил нормально.


  19. По первому вопросу, не знаю (никогда так не делал), а по второму, нужно копать исходники из папки OpenCV\otherlibs\highgui\cvcap_***.cpp

    дошло до меня зачем такое:

    typedef struct CvCapture CvCapture;

    это просто чтобы переменную, допустим cap, типа

    struct cvCapture объявлять так:

    cvCapture cap;

    а не так:

    struct cvCapture cap;

    век живи - век учись ;)


  20. За библиотеку спасибо, но хотелось бы посмотреть, как работает cvDFT() для обучения.

    В книге по OpenCV есть пример, но я его не могу понять как его в реальности применить.

    Пытался сделать, как я его понимаю, в результате получил черное пятно в белой рамке. Поэтому

    хочу посмотреть живой пример для этой функции.

    В папке с примерами есть такой код (opencv\samples\c\dft.c), скорее всего, Вам просто нужно правильно преобразовать шкалы.

    #include <cxcore.h>
    #include <cv.h>
    #include <highgui.h>

    // Rearrange the quadrants of Fourier image so that the origin is at
    // the image center
    // src & dst arrays of equal size & type
    void cvShiftDFT(CvArr * src_arr, CvArr * dst_arr )
    {
    CvMat * tmp;
    CvMat q1stub, q2stub;
    CvMat q3stub, q4stub;
    CvMat d1stub, d2stub;
    CvMat d3stub, d4stub;
    CvMat * q1, * q2, * q3, * q4;
    CvMat * d1, * d2, * d3, * d4;

    CvSize size = cvGetSize(src_arr);
    CvSize dst_size = cvGetSize(dst_arr);
    int cx, cy;

    if(dst_size.width != size.width ||
    dst_size.height != size.height){
    cvError( CV_StsUnmatchedSizes, "cvShiftDFT",
    "Source and Destination arrays must have equal sizes", __FILE__, __LINE__ );
    }

    if(src_arr==dst_arr){
    tmp = cvCreateMat(size.height/2, size.width/2, cvGetElemType(src_arr));
    }

    cx = size.width/2;
    cy = size.height/2; // image center

    q1 = cvGetSubRect( src_arr, &q1stub, cvRect(0,0,cx, cy) );
    q2 = cvGetSubRect( src_arr, &q2stub, cvRect(cx,0,cx,cy) );
    q3 = cvGetSubRect( src_arr, &q3stub, cvRect(cx,cy,cx,cy) );
    q4 = cvGetSubRect( src_arr, &q4stub, cvRect(0,cy,cx,cy) );
    d1 = cvGetSubRect( src_arr, &d1stub, cvRect(0,0,cx,cy) );
    d2 = cvGetSubRect( src_arr, &d2stub, cvRect(cx,0,cx,cy) );
    d3 = cvGetSubRect( src_arr, &d3stub, cvRect(cx,cy,cx,cy) );
    d4 = cvGetSubRect( src_arr, &d4stub, cvRect(0,cy,cx,cy) );

    if(src_arr!=dst_arr){
    if( !CV_ARE_TYPES_EQ( q1, d1 )){
    cvError( CV_StsUnmatchedFormats, "cvShiftDFT",
    "Source and Destination arrays must have the same format", __FILE__, __LINE__ );
    }
    cvCopy(q3, d1, 0);
    cvCopy(q4, d2, 0);
    cvCopy(q1, d3, 0);
    cvCopy(q2, d4, 0);
    }
    else{
    cvCopy(q3, tmp, 0);
    cvCopy(q1, q3, 0);
    cvCopy(tmp, q1, 0);
    cvCopy(q4, tmp, 0);
    cvCopy(q2, q4, 0);
    cvCopy(tmp, q2, 0);
    }
    }

    int main(int argc, char ** argv)
    {
    const char* filename = argc >=2 ? argv[1] : "lena.jpg";
    IplImage * im;

    IplImage * realInput;
    IplImage * imaginaryInput;
    IplImage * complexInput;
    int dft_M, dft_N;
    CvMat* dft_A, tmp;
    IplImage * image_Re;
    IplImage * image_Im;
    double m, M;

    im = cvLoadImage( filename, CV_LOAD_IMAGE_GRAYSCALE );
    if( !im )
    return -1;

    realInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);
    imaginaryInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);
    complexInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 2);

    cvScale(im, realInput, 1.0, 0.0);
    cvZero(imaginaryInput);
    cvMerge(realInput, imaginaryInput, NULL, NULL, complexInput);

    dft_M = cvGetOptimalDFTSize( im->height - 1 );
    dft_N = cvGetOptimalDFTSize( im->width - 1 );

    dft_A = cvCreateMat( dft_M, dft_N, CV_64FC2 );
    image_Re = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
    image_Im = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);

    // copy A to dft_A and pad dft_A with zeros
    cvGetSubRect( dft_A, &tmp, cvRect(0,0, im->width, im->height));
    cvCopy( complexInput, &tmp, NULL );
    if( dft_A->cols > im->width )
    {
    cvGetSubRect( dft_A, &tmp, cvRect(im->width,0, dft_A->cols - im->width, im->height));
    cvZero( &tmp );
    }

    // no need to pad bottom part of dft_A with zeros because of
    // use nonzero_rows parameter in cvDFT() call below

    cvDFT( dft_A, dft_A, CV_DXT_FORWARD, complexInput->height );

    cvNamedWindow("win", 0);
    cvNamedWindow("magnitude", 0);
    cvShowImage("win", im);

    // Split Fourier in real and imaginary parts
    cvSplit( dft_A, image_Re, image_Im, 0, 0 );

    // Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2)
    cvPow( image_Re, image_Re, 2.0);
    cvPow( image_Im, image_Im, 2.0);
    cvAdd( image_Re, image_Im, image_Re, NULL);
    cvPow( image_Re, image_Re, 0.5 );

    // Compute log(1 + Mag)
    cvAddS( image_Re, cvScalarAll(1.0), image_Re, NULL ); // 1 + Mag
    cvLog( image_Re, image_Re ); // log(1 + Mag)


    // Rearrange the quadrants of Fourier image so that the origin is at
    // the image center
    cvShiftDFT( image_Re, image_Re );

    cvMinMaxLoc(image_Re, &m, &M, NULL, NULL, NULL);
    cvScale(image_Re, image_Re, 1.0/(M-m), 1.0*(-m)/(M-m));
    cvShowImage("magnitude", image_Re);

    cvWaitKey(-1);
    return 0;
    }[/code]


  21. У меня обычная камера, подключаемая к компьютеру через DV. Её разрешение 720 на 576, довольно большое. Я уменьшил его в два раза до 360 на 288, производительность выросла примерно до того уровня что и у вас 15-20 фпс.

    Насчёт IPP я не могу понять, он бесплатный или нет? На сайте Интела я нашел вот это http://software.intel.com/en-us/intel-ipp это оно?

    Если не трудно, дайте прямую ссылку.

    Спасибо.

    Для линукс, насколько я знаю бесплатный, а для windows платный.

    Качается отсюда раздел "Performance Libraries" : http://software.intel.com/en-us/articles/i...luation-center/


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

    Есть такая структура:

    typedef struct CvCapture CvCapture;
    Ну совершенно не укладывающаяся в голове делфийца... как ее описать? Еще не нашел пару нужных функций, к примеру: cvCaptureFromFile. Перехожу по ней и вижу такое описание:
    ...
    #define cvCaptureFromFile cvCreateFileCapture
    #define cvCaptureFromCAM cvCreateCameraCapture
    #define cvCaptureFromAVI cvCaptureFromFile
    ...[/code]

    Подскажите плиз откуда их экспортировать?

    По первому вопросу, не знаю (никогда так не делал), а по второму, нужно копать исходники из папки OpenCV\otherlibs\highgui\cvcap_***.cpp


  23. Всем привет,

    кто-нибудь подкиньте пример с cvDFT(), реально работающий, ну чтобы на входе картинка и на выходе ее результат.

    Заранее благодарю.

    Можно здесь глянуть: http://nashruddin.com/an-example-on-using-...ith-opencv.html, не cvDFT но вроде работает.

×