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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • pejT
    Thành viên mới
    • May 2010
    • 2

    #1

    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, 00:53.
  • LCD_4BIT
    Thành viên chính thức
    • Jun 2010
    • 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
    Bể học vô biên

    Comment

    • nguyenhuutan
      Thành viên tích cực
      • Jun 2007
      • 104

      #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

      • fantasy9876
        Thành viên mới
        • May 2010
        • 4

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

        Comment

        • nga381
          Thành viên mới
          • Dec 2009
          • 1

          #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...