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

Alex_grem

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

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

  • Посещение

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


  1. Помогите, пожалуйста! Есть либа, созданная в MS Visual Studio 2008 (lib и dll). Файл .lib сконвертил через coff2omf, добавил в проект C++Builder, а он все равно пишет:

    [iLINK32 Error] Error: Unresolved external ......

    Файл .dll лежит рядом с файлом .lib....Может кто-что посоветует...2 дня бьюсь, а ответа так и не нашел :)


  2. Пишу в 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

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


  3. с помощью cvSplit

    Пытаюсь получить след. способом значения H,S,V (см. код) для конкретной точки, но в конечном итоге в массиве hsv содержатся значения цветового пространства RGB...может где-то ошибаюсь?

    void GetHSV_val(IplImage *frame, int x, int y)
    {
    IplImage *hue, *sat, *val, *HSV;

    uchar *dataHue, *dataSat, *dataVal;

    hue = cvCreateImage(cvGetSize(frame), frame->depth, 1); //Hue (тон)
    sat = cvCreateImage(cvGetSize(frame), frame->depth, 1); //Saturation (насыщенность)
    val = cvCreateImage(cvGetSize(frame), frame->depth, 1); //Value (значение)
    HSV = cvCreateImage(cvGetSize(frame), frame->depth, 3);


    cvZero(hue); cvZero(sat); cvZero(val); cvZero(HSV);

    cvCvtColor( frame, HSV, CV_BGR2HSV);

    cvSplit(HSV, hue, sat, val, 0);

    dataHue = (uchar *)hue->imageData;
    dataSat = (uchar *)sat->imageData;
    dataVal = (uchar *)val->imageData;

    hsv[0] = dataHue[x*(hue->widthStep)+y];
    hsv[1] = dataSat[x*(sat->widthStep)+y];
    hsv[2] = dataVal[x*(val->widthStep)+y];

    .................................................................
    .................................................................

    }
    [/codebox]


  4. Думаю нужно отфильтровать пиксели с нужным (уникальным для картинки) значением при помощи функции :

    http://www.compvision.ru/index.php/%D0%90%...0%B8%D0%B5#CmpS

    для каждой плоскости изображения (покомпонентно).

    Результат объединить по "И" при помощи:

    http://www.compvision.ru/index.php/%D0%90%...D0%B8%D0%B5#And

    А потом обычным поиском контура.

    "для каждой плоскости изображения (покомпонентно)" имеется ввиду для каждого цвета?


  5. Версия opencv 1.2. Весь код, собственно, Ваша функция.... Все что я добавил, отмечено комментарием

    float XC[1000]={0};
    float YC[1000]={0};
    float S[1000]={0};
    double mt=0;
    int ID=0;
    int NumCont=0;
    int NumCont1=0;
    CvMemStorage* storage = 0;
    CvSeq* contours;
    CvSeq* Templ;
    CvSeq* result;
    storage = cvCreateMemStorage(0);
    CvSeq* polygons = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPoint), storage );
    CvMoments moments;
    CvHuMoments hu_moments;
    //while(1)
    //{
    cvCvtColor(Grab, gray, CV_BGR2GRAY); // Получаем серый цвет
    
    cvThreshold( gray, gray, 150,255,CV_THRESH_BINARY);
    
    // Необходимо удалить белый бордюр
    cvRectangle(gray, cvPoint(0,0), cvPoint(gray->width-1,gray->height-1),CV_RGB(0,0,0));
    // Утолщаем контуры
    cvDilate( gray, gray, 0, 1 );
    // Нах. границы
    cvCanny( gray, gray, 50, Val1, 5 );
    // Нах. контуры
    cvFindContours( gray, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0))
    ;
    //--------------
    if(contours!=0)
    {
    NumCont=contours->total; // количество найденных контуров
    }
    
    int NC=0;
    for(;contours!=0;contours = contours->h_next)
    {
    // Аппр. контуров полигонами
    result = cvApproxPoly( contours, sizeof(CvContour), storage,CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.001, 0 );
    // Площадь полигона
    double area=fabs(cvContourArea(result,CV_WHOLE_SEQ));
    // Объявление читалки точек
    CvSeqReader reader;
    // Инициализация читалки точек
    cvStartReadSeq( result, &reader, 0 );
    // Две точки
    CvPoint pt[2];
    if(area>500)
    {
    // Вычисляем моменты
    cvMoments( result, &moments);
    
    // Добавленный код 
    cvGetHuMoments(&moments,&hu_moments);
    
    char m = cvWaitKey(33);
    if( m == 109)
    {
    cout<<"Hu1 = "<<hu_moments.hu1<<endl;
    cout<<"Hu2 = "<<hu_moments.hu2<<endl;
    cout<<"Hu3 = "<<hu_moments.hu3<<endl;
    cout<<"Hu4 = "<<hu_moments.hu4<<endl;
    cout<<"Hu5 = "<<hu_moments.hu5<<endl;
    cout<<"Hu6 = "<<hu_moments.hu6<<endl;
    cout<<"Hu7 = "<<hu_moments.hu7<<endl<<endl;
    }
    // Коней добавленного кода
    
    // Центр тяжести
    float xc=(moments.m10/moments.m00);
    float yc=(moments.m01/moments.m00);
    
    // Обрубаем клонов
    bool ok=1;
    for (int o=0;o<NC;o++)
    {
    if( ((xc-XC[o])*(xc-XC[o])+(yc-YC[o])*(yc-YC[o]))<10 && fabs((area-S[o])/(area+S[o]))<0.3){ok=0;}
    }
    //
    if(ok){
    
    // Запоминаем шаблон
    if(NumCont1==0)
    {Templ=cvCloneSeq(result);}
    // Сравниваем с найденными контурами
    mt=cvMatchShapes( Templ, result,CV_CONTOURS_MATCH_I3);
    
    NumCont1++;
    double M00=moments.m00;
    double M20=moments.m20;
    double M02=moments.m02;
    double M11=moments.m11;
    
    double A=(M20/M00)-xc*xc;
    double B=2*((M11/M00)-xc*yc);
    double C=(M02/M00)-yc*yc;
    
    double LL=sqrt( ( (A+C)+sqrt(B*B+(A-C)*(A-C)) )/2)*2;
    double LW=sqrt( ( (A+C)-sqrt(B*B+(A-C)*(A-C)) )/2)*2;
    
    // Для вычисления угла нужны центральные моменты инерции
    M20=moments.mu20;
    M02=moments.mu02;
    M11=moments.mu11;
    
    double theta=(atan2(2*M11,(M02-M20))/2)*(180/pi);
    // Отмечаем центр
    cvCircle( Grab, cvPoint(xc,yc), 3, CV_RGB(0,255,255), -1, 8, 0 );
    //string str1 = str(format("%lf") % mt);
    _fcvt_s(NumChar, 10, mt, 2, &Decimal, &Sign);
    cvPutText( Grab,NumChar, cvPoint(xc,yc),&font, CV_RGB(255,255,0));
    
    // Достаем точки из хранилища точек и рисуем линии
    for (int i=0;i<result->total-1;i++)
    {
    CV_READ_SEQ_ELEM( pt[0], reader );
    CV_READ_SEQ_ELEM( pt[1], reader );
    if(mt>0.5){cvLine(Grab,pt[0],pt[1],CV_RGB(255,0,0));}
    else{cvLine(Grab,pt[0],pt[1],CV_RGB(0,255,0));}
    }
    }
    XC[NC]=xc;
    YC[NC]=yc;
    S[NC]=area;
    NC++;
    } // if
    } // for
    cvPutText( Grab,"NCont1=", cvPoint(20,20),&font, CV_RGB(255,255,0));

    результат:
    7f481ebeae8e.jpg


  6. Попробовал сделать следующее: создал ч/б рисунок 100*100 с окружностью по центру, нашел контур, посчитал инвариантные моменты, затем переместил эту окружность на другую позицию и получил совершенно другие значения инвариантных моментов. Почему?


  7. widthStep - Параметр, определяющий расстояние между соседними по вертикали точками изображения.

    Нужен т.к. количество байтов по ширине картинке может быть не равно количеству точек по горизонтали (как пример можно привести бинарное изображение 1 байт - 8 точек, а если ширина изображения не кратна 8, то тут и нужен параметр widthStep).

    Если честно, не понимаю про что идет речь. Какие точки в 1 байте? есть ли какие-нибудь ссылки на данную тему?


  8. Скажите, пожалуйста, существуют ли какие-нибудь численные характеристики для отличия геометрии контуров. Т.е. есть ли какая-то численная характеристика, отличающая контур в форме круга от прямоугольного контура или контура в виде овала?


  9. Не могли бы Вы объяснить, что означают слова: "Проект находит контуры и выводит степень их похожести, сравнение идет с первым найденным контуром...". Получается мы находим на картинке контуры объектов, запоминаем их...а с чем сравниваем, с теми же объектами что ли?

×