Thông báo

Collapse
No announcement yet.

Sử dụng OpenCV trong Visual C++ 2008

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

  • #46
    Nguyên văn bởi tomathang Xem bài viết
    Mình đang viết luận văn về phát hiện mặt người sử dụng haar-like boosting.
    Mình đã làm được tới bước trích ra các đặc trưng từ tập ảnh mẫu huấn luyện (có mặt, không có mặt) và lưu vào 1 file .txt
    Bạn nào giúp mình cách dùng lệnh Haartraining trong opencv để huấn luyện và lưu vào file .XML với.
    Mình tìm tài liệu mà không thấy, chỉ thấy ebook Learning OpenCV nói về hàm haartraining() mà không nói rõ hơn.
    (OpenCv 2.1 + vs 2008).
    Cám ơn nhiều.
    chào bạn.file .xml dùng để nhận dạng khuôn mặt thì trong openCV/data đã có sẵn bạn chỉ cần lấy ra và sử dụng.
    còn đây là code nhận dạng khuôn mặt sử dụng win32 ko dùng MFC rất dễ hiểu bạn có thể tham khảo.

    #include "cv.h"
    #include "highgui.h"

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    #include <math.h>
    #include <float.h>
    #include <limits.h>
    #include <time.h>
    #include <ctype.h>
    #include <iostream>

    // Create a string that contains the exact cascade name
    const char* cascade_name =
    "C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt2.xml"; //lựa chọn đường dẫn cho phù hợp
    /* "haarcascade_profileface.xml";*/


    // Function prototype for detecting and drawing an object from an image
    void detect_and_draw( IplImage* image );
    int dem=0;
    // Main function, defines the entry point for the program.
    int main( int argc, char** argv )
    {

    // Create a sample image
    IplImage *img = cvLoadImage("D:\\1.jpg"); // bạn có thể thay đổi đường dẫn cho phù hợp với ảnh bạn cần nhận dạng

    // Call the function to detect and draw the face positions
    detect_and_draw(img);

    // Wait for user input before quitting the program
    cvWaitKey();

    // Release the image
    cvReleaseImage(&img);
    std::cout << "co tat ca"<<dem << " nguoi//";
    // Destroy the window previously created with filename: "result"
    cvDestroyWindow("result");
    //MessageBox(dem);

    // return 0 to indicate successfull execution of the program
    system("pause");
    return 0;
    }

    // Function to detect and draw any faces that is present in an image
    void detect_and_draw( IplImage* img)
    {

    // Create memory for calculations
    static CvMemStorage* storage = 0;

    // Create a new Haar classifier
    static CvHaarClassifierCascade* cascade = 0;

    int scale = 1;

    // Create a new image based on the input image
    IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );

    // Create two points to represent the face locations
    CvPoint pt1, pt2;
    int i;

    // Load the HaarClassifierCascade
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

    // Check whether the cascade has loaded successfully. Else report and error and quit
    if( !cascade )
    {
    fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
    return;
    }

    // Allocate the memory storage
    storage = cvCreateMemStorage(0);

    // Create a new named window with title: result
    cvNamedWindow( "result", 1 );

    // Clear the memory storage which was used before
    cvClearMemStorage( storage );

    // Find whether the cascade is loaded, to find the faces. If yes, then:
    if( cascade )
    {

    // There can be more than one face in an image. So create a growable sequence of faces.
    // Detect the objects and store them in the sequence
    CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
    1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
    cvSize(40, 40) );

    // Loop the number of faces found.
    for( i = 0; i < (faces ? faces->total : 0); i++ )
    {
    // Create a new rectangle for drawing the face
    CvRect* r = (CvRect*)cvGetSeqElem( faces, i );

    // Find the dimensions of the face,and scale it if necessary
    pt1.x = r->x*scale;
    pt2.x = (r->x+r->width)*scale;
    pt1.y = r->y*scale;
    pt2.y = (r->y+r->height)*scale;

    // Draw the rectangle in the input image
    cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
    dem++;
    }
    }

    // Show the image in the window named "result"
    cvShowImage( "result", img );

    // Release the temp image created.
    cvReleaseImage( &temp );
    }

    Comment


    • #47
      Cám ơn huypyvn, nhưng bài báo cáo mình cần làm theo từng bước: 1- trích đặc trưng, 2-huấn luyện từ file chứa đặc trưng, 3-dectect.
      File XML trong Opencv có sẵn là tối ưu và chính xác cao để phát hiện, nhưng mình cần huấn luyện lưu vào file xml từ file text chứa đặc trưng như mình nói trên.
      Vì file text chứa đặc trưng này mình sẽ dùng nhiều thuật toán khác nhau để huấn luyện (Adaboost, SVM) nên mình mới làm từng bước để so sánh kết quả giữa các thuật toán.

      Comment


      • #48
        bạn tomathang có thể tham khảo ở các trang web sau:
        http://www.shervinemami.info/faceRecognition.html
        http://www.cognotics.com/opencv/serv...t_4/index.html

        Comment


        • #49
          Chào các bác! Em sang kỳ tới là làm đồ án tốt nghiệp,em định xử lý ảnh dùng ARM cho robot. Bác nào có tài liệu giúp em với ạ.
          Thanks các bác!

          Comment


          • #50
            Các bác cho em hỏi,muốn học xử lý ảnh thì bắt đầu từ đâu ạ,thấy nó hay quá mà không biết học như thế nào,em chưa biết gì về nó cả
            ĐẠI HỌC SƯ PHẠM KỸ THUẬT I

            Nợ cha một sự nghiệp - Nợ mẹ một nàng dâu

            Comment


            • #51
              Với những bài tut cơ bản của anh nthung2002 và những ý tưởng từ anh compvis em cũng đã hoàn thành sơ bộ project detect vật cản vả đạc khoảng cách(trong tầm <70 cm). Tuy nhiên khoảng cách này hoàn toàn là phải đo đạc rồi tìm hàm nội suy, chứ công thức Z = fx*D/(Xright-Xleft) cho kết quả không được đúng (đã thử nhiều phương án, quan hệ này không được tuyến tính). Đây là video của em, một lần nữa cảm ơn hai anh:

              Comment


              • #52
                Chào a 'ooooo' !! e cũng đang tìm hiểu về vấn đề đo khảng cách sử dụng opencv.e rât ấn tượng với clip của a.Liệu a có thể post đoạn code lên diẽn đàn để mọi người tham khảo được không ạ?
                Chân thành cảm ơn a nhiều!!

                Comment


                • #53
                  Hiện tại chưa được bạn ơi.
                  Tuy nhiên kiến thức chủ yếu nằm trong hai chương 11, 12 của cuốn Learning OpenCV Computer Vision with the OpenCV Library
                  Bạn cũng có thể tham khảo link sau: http://www.pages.drexel.edu/~nk752/distanceTut.html
                  và ở đây: http://sites.google.com/site/todddan...m_laser_ranger

                  Chúc bạn thành công!
                  Last edited by ooooo; 24-05-2011, 10:40.

                  Comment


                  • #54
                    Nguyên văn bởi ooooo Xem bài viết
                    Hiện tại chưa được bạn ơi.
                    Tuy nhiên kiến thức chủ yếu nằm trong hai chương 11, 12 của cuốn Learning OpenCV Computer Vision with the OpenCV Library
                    Bạn cũng có thể tham khảo link sau: http://www.pages.drexel.edu/~nk752/distanceTut.html
                    và ở đây: http://sites.google.com/site/todddan...m_laser_ranger
                    Chúc bạn thành công!
                    Thanks bác nhiều. Có j khó khăn mong anh và mọi người giúp đỡ.

                    Comment


                    • #55
                      Nguyên văn bởi ooooo Xem bài viết
                      Với những bài tut cơ bản của anh nthung2002 và những ý tưởng từ anh compvis em cũng đã hoàn thành sơ bộ project detect vật cản vả đạc khoảng cách(trong tầm <70 cm). Tuy nhiên khoảng cách này hoàn toàn là phải đo đạc rồi tìm hàm nội suy, chứ công thức Z = fx*D/(Xright-Xleft) cho kết quả không được đúng (đã thử nhiều phương án, quan hệ này không được tuyến tính). Đây là video của em, một lần nữa cảm ơn hai anh:

                      Congratulations ! Những việc làm của em làm tôi liên tưởng tới bản thân mình ngày xưa. Nghĩ là quyết tâm làm bằng được. Không phải cảm ơn tôi em nhé. Nghiên cứu khoa học là phải say sưa, tự mày mò đủ thứ. Thành quả đạt được sẽ là động lực cho những công việc tiếp theo. Xin chúc mừng em !

                      Em có thể nâng bài toán lên tầm cao hơn khi cameras của em chuyển động (áp dụng cho robot).
                      Last edited by compvis; 25-05-2011, 20:58.

                      Comment


                      • #56
                        Nguyên văn bởi dds1988 Xem bài viết
                        Chào a 'ooooo' !! e cũng đang tìm hiểu về vấn đề đo khảng cách sử dụng opencv.e rât ấn tượng với clip của a.Liệu a có thể post đoạn code lên diẽn đàn để mọi người tham khảo được không ạ?
                        Chân thành cảm ơn a nhiều!!
                        NOT recommended

                        Comment


                        • #57
                          @ooooo: Rất tuyệt vời chúc mừng bạn
                          Bể học vô biên

                          Comment


                          • #58
                            Các bạn cho mình hỏi chút về opencv nhé! định lập topic nhưng sợ admin la. hehe!!!

                            ai tìm hiểu về opencv giải thích chút về cấu trúc CvSeg đi! đọc hoài mà không hiểu:

                            typedef struct CvSeq {
                            int flags; // miscellaneous flags
                            int header_size; // size of sequence header
                            CvSeq* h_prev; // previous sequence
                            CvSeq* h_next; // next sequence
                            CvSeq* v_prev; // 2nd previous sequence
                            CvSeq* v_next // 2nd next sequence
                            int total; // total number of elements
                            int elem_size; // size of sequence element in byte
                            char* block_max; // maximal bound of the last block
                            char* ptr; // current write pointer
                            int delta_elems; // how many elements allocated

                            // when the sequence grows

                            CvMemStorage* storage; // where the sequence is stored
                            CvSeqBlock* free_blocks; // free blocks list
                            CvSeqBlock* first; // pointer to the first sequence block
                            }

                            cấu trúc này thấy khá quan trọng và dùng nhiều nhưng mình hiểu nó mơ hồ quá, mong các bạn giúp đỡ!!

                            Comment


                            • #59
                              có ai đi ngang qua mà biết giải thích giùm mình tí đi!!

                              Comment


                              • #60
                                Nguyên văn bởi vinachip Xem bài viết
                                Các bạn cho mình hỏi chút về opencv nhé! định lập topic nhưng sợ admin la. hehe!!!

                                ai tìm hiểu về opencv giải thích chút về cấu trúc CvSeg đi! đọc hoài mà không hiểu:

                                typedef struct CvSeq {
                                int flags; // miscellaneous flags
                                int header_size; // size of sequence header
                                CvSeq* h_prev; // previous sequence
                                CvSeq* h_next; // next sequence
                                CvSeq* v_prev; // 2nd previous sequence
                                CvSeq* v_next // 2nd next sequence
                                int total; // total number of elements
                                int elem_size; // size of sequence element in byte
                                char* block_max; // maximal bound of the last block
                                char* ptr; // current write pointer
                                int delta_elems; // how many elements allocated

                                // when the sequence grows

                                CvMemStorage* storage; // where the sequence is stored
                                CvSeqBlock* free_blocks; // free blocks list
                                CvSeqBlock* first; // pointer to the first sequence block
                                }
                                cấu trúc này thấy khá quan trọng và dùng nhiều nhưng mình hiểu nó mơ hồ quá, mong các bạn giúp đỡ!!
                                @vinachip: đây là một dạng cấu trúc (có thể định nghĩa theo dạng class - lớp) mà trong c,c++ người ta gọi nó là "Linked List". Cấu trúc này được sử dụng với dạng dữ liệu phức hợp và vì thế nó cũng rất phức tạp trong định nghĩa và sử dụng. Nếu bạn có kiến thức tốt về c,c++ thì bạn sẽ hiểu rõ. Bạn có thể tham khảo các link dưới đây:

                                http://www.inversereality.org/tutori...nkedlists.html
                                http://locklessinc.com/articles/flexible_lists_in_cpp/
                                http://www.dreamincode.net/code/snippet82.htm
                                ... and so on...
                                You could Google it


                                Trong OpenCV, sử dụng con trỏ CvSeq như một mảng để chứa các phần tử. Để hiểu rõ nhất về CvSeq, bạn hãy làm một ví dụ nhỏ với cvFindContours. Một link tôi cho là khá hay về cvFindContours mà bạn có thể tham khảo:
                                http://guitarhero-opencv.googlecode....n/trunk/cv.cpp

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • nhathung1101
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi nhathung1101
                                  Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                  Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                  Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                  Hôm qua, 22:18
                                • dinhthuong80
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi dinhthuong80
                                  Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                                  Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                                  Hôm qua, 14:51
                                • dinhthuong80
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi dinhthuong80
                                  Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                                  Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                                  Hôm qua, 14:39
                                • dinhthuong80
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi dinhthuong80
                                  Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                                  Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                                  Hôm qua, 14:28
                                • bqviet
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi bqviet
                                  Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                                  21-02-2025, 20:26
                                • mèomướp
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi mèomướp
                                  Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                                  21-02-2025, 12:32
                                • vi van pham
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi vi van pham
                                  Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                                  Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                                  20-02-2025, 21:31
                                • bqviet
                                  Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                                  bởi bqviet
                                  Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                                  20-02-2025, 17:22
                                • dinhthuong80
                                  Trả lời cho Tiếng Anh cho người Việt
                                  bởi dinhthuong80
                                  Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                                  Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                                  20-02-2025, 11:52
                                • vi van pham
                                  Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                                  bởi vi van pham
                                  Uống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?

                                  Cái khó bó cái...
                                  19-02-2025, 23:05
                                Đang tải...
                                X