Thông báo

Collapse
No announcement yet.

Nhận diện vật thể trong ảnh/ camera + hàm cvFindDominantPoints bị thiếu trong cv.h

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nhận diện vật thể trong ảnh/ camera + hàm cvFindDominantPoints bị thiếu trong cv.h

    Chào mọi người, em là newbie trong lĩnh vực này, em đang làm 1 đề tài xử lý ảnh dùng camera cho , sử dụng thư viện opencv. Đề tài của em có liên quan đến nhận diện đối tượng bằng camera nhưng trước hết em xử lý trên ảnh trước cho dễ.

    Em đang tìm hiểu về cách tách 1 vật thể trong 1 ảnh, em có đọc chuơng 8 trong sách Learning Opencv, trong đó có xử dụng hàm cvFindDominantPoints (ở trang 246 của sách) để tìm các "đỉnh" của vật thể (như hình):
    Click image for larger version

Name:	Untitled.png
Views:	1
Size:	67.3 KB
ID:	1408759

    và tạo hình tròn/vuông/tam giác... để "bao" đối tượng lại (như hình dưới):
    Click image for larger version

Name:	c.png
Views:	1
Size:	21.9 KB
ID:	1408760

    Hàm cvFindDominantPoints() này là có sẵn nhưng không hiểu vì sao trong thư viện cv.h lại không có (dù em tìm khá kĩ ). Mong các bác giúp em.

    Sắn đây em cũng xin post 1 ví dụ có sử dụng hàm này (em không chạy được code này vì khi debug có lỗi cvFindDominantPoints': identifier not found)

    /*-------------------------------------------------------*/
    #include <cv.h>
    #include <highgui.h>

    int main()
    {
    CvSeq* contours = 0; CvSeq* dps = 0;
    int i, idx;
    CvPoint p;

    CvMemStorage* storage_dp = cvCreateMemStorage(0);
    CvMemStorage* storage_ct = cvCreateMemStorage(0);

    IplImage* img = cvLoadImage("ten_anh_nhap_vao.bmp", CV_LOAD_IMAGE_GRAYSCALE);

    cvNamedWindow( "image" );
    cvShowImage( "image", img );

    cvFindContours(
    img, storage_ct,
    &contours,
    sizeof(CvContour),
    CV_RETR_TREE,
    CV_CHAIN_APPROX_SIMPLE );

    dps = cvFindDominantPoints(
    contours,
    storage_dp,
    CV_DOMINANT_IPAN,
    7, 20, 9, 150 );

    contours = cvApproxPoly( contours, sizeof(CvContour), storage_ct, CV_POLY_APPROX_DP, 3, 1 );

    printf("found %d DPs and %d Contours \n", dps->total, contours->total );

    for ( i = 0; i < dps->total; i++)
    {
    idx = *(int *) cvGetSeqElem(dps, i);
    p = *(CvPoint *) cvGetSeqElem(contours, idx);
    cvDrawCircle( img, p , 1, cvScalarAll(255) );
    printf("%d %d %d\n", idx, p.x, p.y);
    }

    cvDrawContours(img, contours, cvScalarAll(100), cvScalarAll(200), 100 );


    cvNamedWindow( "contours" );
    cvShowImage( "contours", img );

    cvWaitKey(0);
    cvReleaseMemStorage( &storage_ct );
    cvReleaseMemStorage( &storage_dp );
    cvReleaseImage( &img );

    return 0;
    }
    /*------------------------------------------------------------------------------*/
    Mong các bác chỉ em hướng gỡ rối
    Last edited by pejT; 29-05-2011, 01:53.

  • #2
    bạn thử tìm nó trong opencv/cvaux.h
    bằng cách gọi hàm #include <cvaux.h>

    -------------------------------------------------
    hoặc bạn có thể tự định nghĩa như sau
    http://read.pudn.com/downloads36/sou...ants.cpp__.htm
    Bể học vô biên

    Comment


    • #3
      Tôi nghĩ bạn có thể tự viết được thuật toán để tìm góc của một object dựa theo các thuật toán Hessian/Harris corner detector không tốn nhiều thời gian lắm, cái chính là bạn hiểu thuật toán tìm góc nó làm gì trong đó. Code mẫu bạn có thể tham khảo của tôi ở trang sau: http://www4.hcmut.edu.vn/~nhtan/CV.htm
      Thân ái. T
      Homepage:

      Comment


      • #4
        Bạn chỉ cần lưu lại tên file .cpp là được.
        Last edited by fantasy9876; 17-07-2011, 11:29.

        Comment


        • #5
          bạn tìm trong thư viện cvaux.h

          Comment

          Về tác giả

          Collapse

          pejT Tìm hiểu thêm về pejT

          Bài viết mới nhất

          Collapse

          Đang tải...
          X