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

  • #31
    Nguyên văn bởi arthasherovu Xem bài viết
    bạn ah`, Cyberlink của mình bình thường, mình muốn hỏi về OpenCV cơ, mình ko thể open Webcam của laptop với đoạn code như trên, trong trường hợp mình mở Cyberlink rồi chạy OpenCV thì ra màn hình của VC++ giống của bạn đó,
    Thanks
    Uh mình biết ý của mình là nếu hiện như thế là opencv của bạn bình thường . Vì bạn dùng cyberlink youcam nên nó phải khởi động mất một lúc hơi lâu bạn cứ chờ một lúc là thấy ok ngay

    PS: Không tin bạn gỡ cyberlink ra sẽ thấy nó hiện ra ngay không phải chờ gì cả
    Bể học vô biên

    Comment


    • #32
      Image sequences (Chuyển đổi một loạt ảnh sang định dạng theo yêu cầu)

      Hi, bạn đã bao giờ gặp trường hợp cần chuyển một loạt bức ảnh từ định dạng này sang định dạng khác bao giờ chưa? Nếu bạn vẫn phải dùng các phần mềm để chuyển từng bức ảnh một thì thời gian tiêu tốn là rất lớn. Trong bài viết này tôi sẽ gửi cho các bạn một phần mềm mà có thể làm công việc trên chỉ trong giây lát. Code của chương trình như sau:

      int i;
      char *fmt = "%d";
      char *base1 ="source_image/hotel.seq";
      char *base2 ="dest_image/hotel.seq";
      char fname[1024];
      char ffmt[1024];
      sprintf(ffmt, "%%s%s%%s\0", fmt);
      Mat src_img;
      Mat dst_img;
      for(i = 1; i < 183; i++)
      {
      sprintf(fname, ffmt, base1, i, ".png");
      src_img = imread(fname);
      strFilename = gcnew System::String(fname);
      Bitmap^ bmpPicBox = gcnew Bitmap(strFilename);
      this->pictureBox1->Image = bmpPicBox;
      this->pictureBox1->Refresh();
      //this->Invalidate();
      //imshow("Image", dst_img);
      if(this->rbToBMP->Checked == true)
      {
      sprintf(fname, ffmt, base2, i, ".bmp");
      dst_img = src_img.clone();
      }
      else if(this->rbToJPG->Checked == true)
      {
      sprintf(fname, ffmt, base2, i, ".jpg");
      dst_img = src_img.clone();
      }
      else if(this->rbToPGM->Checked == true)
      {
      sprintf(fname, ffmt, base2, i, ".pgm");
      cvtColor(src_img, dst_img, CV_BGR2GRAY);
      }
      else
      {
      sprintf(fname, ffmt, base2, i, ".png");
      dst_img = src_img.clone();
      }

      //std::vector<int> params;
      //params.push_back( CV_IMWRITE_PXM_BINARY);
      //params.push_back(1);
      imwrite(fname, dst_img);
      waitKey(10);

      }
      Những dòng màu đỏ là những dòng bạn cần tinh chỉnh để phù hợp với đường dẫn của bức ảnh và số lượng bức ảnh cũng như địa chỉ của ảnh được tạo ra.
      Chương trình này đã được test đầy đủ với 183 ảnh định dạng .png (hotel.seq1.png ... hotel.seq183.png) chuyển sang các định dạng .jpg, .bmp và .pgm.
      Các bạn có thể tham khảo source code trong file đính kèm.
      Attached Files

      Comment


      • #33
        Cám ơn cho những chia sẻ hữu ích của bạn!!!

        Comment


        • #34
          Anh nthung2002 ơi anh có thể hướng dẫn cho em cách cài đặt OpenCV vao ViSual rõ hơn được ko.

          Em đọc bài hướng dẫn bằng English mà anh gửi thì được nhưng mà đoạn cuối có một ít tiếng Tàu hay gì đó em chẳng hiểu gì cả.

          Anh có thể hướng dẫn em cách cài đặt chính xác và làm sao để biết là đã OK rồi ko

          Comment


          • #35
            Hướng Dẫn Chi Tiết Sử Dụng OpenCV 2.1 trong Visual C++ 2008

            Chào mọi người, hôm nay tôi sẽ hướng dẫn chi tiết hơn cho các bạn cách cài đặt và sử dụng OpenCV trong visual C++ 2008.
            - Trước tiên bạn cần cài đặt visual C++ 2008 (bản Express cũng được)
            - Sau đó download phần mềm OPenCV 2.1 dành cho Visual C++ 2008 theo đường link sau: http://sourceforge.net/projects/open...pencv-win/2.1/
            - Copy thư mục opencv trong: C:\OpenCV2.1\include vào thư mục: C:\Program Files\Microsoft Visual Studio 9.0\VC\include
            - Copy tất cả các file .lib trong thư mục: C:\OpenCV2.1\lib vào thư mục: C:\Program Files\Microsoft Visual Studio 9.0\VC\lib
            - Copy tất cả các file .dll trong thư mục: C:\OpenCV2.1\bin vào thư mục: C:\WINDOWS\system32
            Đến đây là xong bước cài đặt OpenCV. Tiếp theo là cách sử dụng OpenCV trong Visual C++ 2008. Tôi sẽ giới thiệu cho các bạn cách sử dụng OpenCV với Win32 Console Application và Windows Forms Application.
            *Thứ nhất là cách sử dụng với Win32 Console Application:
            -Bước 1: Tạo một empty project
            -Bước 2: Add một C++ file với tên tùy ý của bạn
            -Bước 3: Add đoạn code sau:

            #include <opencv/cv.h>
            #include <opencv/highgui.h>
            int main ()
            {
            IplImage* img = cvLoadImage("Winter.jpg");
            cvNamedWindow("winter", CV_WINDOW_AUTOSIZE);
            cvShowImage("winter", img);
            cvWaitKey(0);
            cvReleaseImage(&img);
            cvDestroyAllWindows();

            return 0;
            }


            //Chú ý là file "Winter.jpg" phải có trong thư mục chứa file .cpp mà bạn vừa tạo ra
            Bước 4: vào Project-> Properties (Alt+F7)->Configuration Properties->Linker->Input->Additional Dependencies và gõ đoạn text sau: cv210d.lib cxcore210d.lib highgui210d.lib cv210.lib cxcore210.lib highgui210.lib
            -Bước 5: Bấm Start Debugging
            Đến đây là OK rồi.
            *Tiếp theo sẽ là cách sử dụng OpenCV với Windows Form Application
            -Bước 1: Tạo một Project Windows Form Application
            -Bước 2: Add vào Form1 một Button
            -Bước 3: Phía trên cùng của Form1.h, add đoạn code sau:
            #pragma once
            #include <opencv/cv.h>
            #include <opencv/highgui.h>

            -Bước 4: trong event: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e), add đoạn code sau:
            IplImage* img = cvLoadImage("Winter.jpg");
            cvNamedWindow("winter", CV_WINDOW_AUTOSIZE);
            cvShowImage("winter", img);
            cvWaitKey(0);
            cvReleaseImage(&img);
            cvDestroyAllWindows();


            //Chú ý là file "Winter.jpg" phải có trong thư mục chứa file Form1.h mà bạn vừa tạo ra
            -Bước 5: vào Project-> Properties (Alt+F7)->Configuration Properties->Linker->Input->Additional Dependencies và gõ đoạn text sau: cv210d.lib cxcore210d.lib highgui210d.lib cv210.lib cxcore210.lib highgui210.lib
            -Bước 6: vào Project-> Properties (Alt+F7)->Configuration Properties->General->Common Language Runtime Support-> chuyển thành: Common Language Runtime Support (/clr)
            -Bước 7: Bấm Start Debugging -> Bấm vào button1 và chiêm ngưỡng kết quả.
            Đây là hướng dẫn cơ bản để dùng OpenCV 2.1 trong Visual C++ 2008. Còn rất nhiều thủ thuật khác nữa để sử dụng phần mềm này. Có thể tôi sẽ update vào thời gian sắp tới nếu các bạn có nhu cầu!
            Last edited by nthung2002; 11-03-2011, 16:15.

            Comment


            • #36
              Cho em hỏi các thư viện có thêm ký tự "d" cuối khác gì so với không có ký tự này.
              Ví dụ như cv210d.lib với cv210.lib

              Comment


              • #37
                Các thư viện có kí tự "d" ở cuối dùng khi Build chương trình với Solution Configurations là Debug, còn thư viện không có kí tự này dùng khi Build chương trình với Solution Configurations là Release.

                Comment


                • #38
                  Nguyên văn bởi ooooo Xem bài viết
                  Cho em hỏi các thư viện có thêm ký tự "d" cuối khác gì so với không có ký tự này.
                  Ví dụ như cv210d.lib với cv210.lib
                  cv210.lib là dạng build kiểu Release (khi bạn đóng gói ứng dụng cuối cùng để cài đặt và chạy phần mềm - thư viện sẽ nhẹ hơn)
                  cv210d.lib là dạng build kiểu Debug (d = Debug, thích hợp khi chương trình đang trong quá trình phát triển để gỡ rối...)

                  Tuy nhiên thì cũng có thể đóng gói ứng dụng cuối cùng với dll (lib) ở dạng debug.
                  Một điều cần lưu ý là khi chọn kiểu build cho dự án thì phải chọn cấu hình cho đúng. Với các header thì không vấn đề gì, với thư viện liên kết tĩnh (lib) và thư viện liên kết động (dll) thì cần chú ý:
                  Kiểu build cho dự án là Debug thì sử dụng xxxd.lib, xxxd.dll
                  Kiểu build cho dự án là Release thì sử dụng xxx.lib, xxx.dll

                  Nếu không đúng, trình biên dịch sẽ báo lỗi: không tìm thấy thư viện...
                  Last edited by compvis; 11-03-2011, 16:01.

                  Comment


                  • #39
                    Display Image Captured From Camera in Picture Box in Windows Forms Application

                    Chào các bạn,
                    chương trình này dùng để hiển thị ảnh capture từ camera trên Picture Box trong ứng dụng Windows Forms Application.
                    Code chính của chương trình như sau:
                    private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
                    timer1->Interval = 30;//Ban co the thay doi thong so nay
                    //lon hoac nho hon de xem ket qua nhe
                    timer1->Enabled = false;
                    }
                    private: System::Void Form1_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) {
                    pin_ptr<CvCapture*> p = &capture;
                    cvReleaseCapture(p);
                    }
                    private: System::Void captureImage(void)
                    {
                    srcImage = cvQueryFrame(capture);
                    //cvFlip(srcImage, srcImage, 0);

                    if((pictureBox1->Image == nullptr))
                    {
                    Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);

                    pictureBox1->Image = bmpPicBox;
                    }

                    Graphics^ g = Graphics::FromImage(pictureBox1->Image);

                    Bitmap^ bmp = gcnew Bitmap(srcImage->width, srcImage->height, srcImage->widthStep,
                    System:rawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(srcImage->imageData));

                    g->DrawImage(bmp, (pictureBox1->Width-srcImage->width)/2, (pictureBox1->Height-srcImage->height)/2);
                    pictureBox1->Refresh();

                    delete(g);
                    }
                    private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
                    captureImage();
                    }
                    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
                    capture = cvCaptureFromCAM(CV_CAP_ANY);
                    if(!capture)
                    {
                    MessageBox::Show("ERROR: Cannot open a camera!");
                    }
                    {
                    timer1->Enabled = true;
                    }
                    }
                    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
                    timer1->Enabled = false;
                    }
                    private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
                    this->Close();
                    }


                    Toi co gui chuong trinh trong file dinh kem.
                    Chuc vui!
                    Attached Files

                    Comment


                    • #40
                      Em đang tìm hiểu cách tính khoảng cách tới đối tượng bằng hai camera từ độ sâu ảnh thu được (các điểm gần camera thì sáng hơn).
                      Em đang đọc bắt đầu đọc chương 11 (Camera Models and Calibration ) + 12 (Projection and 3D Vision) trong cuốn Learning OpenCV của OReilly. Em muốn các anh giúp cho cái hướng đi. Cũng mới bắt đầu tìm hiểu nên hỏi hơi gà. Em cũng xem một số thread về vấn đề này.

                      Như của anh compvis:
                      Nguyên văn bởi compvis Xem bài viết
                      Câu hỏi của bạn Diep khá thú vị, và bạn có thể tìm hiểu về vấn đề này qua nhiều openproject được post ở trên mạng. Để Webcam của bạn capture được hình ảnh đỏi hỏi bạn phải có trình điều khiển thiết bị để điều khiển nó (Device Driver). Khi bạn đã điều khiển được Webcam rồi, bạn phải xây dựng cấu trúc dữ liệu định dạng hình ảnh nhận được từ webcam (chẳng hạn như các cấu trúc mà chúng ta đã biết như bmp, jpg, IplImage<Intel Corporation>...) và xây dựng các hàm vào ra thao tác với hình ảnh. Vấn đề tìm khoảng cách tới đối tượng, bạn phải sử dụng 2 camera, calibrate chúng và sử dụng công thức sau đây để tình toán khoảng cách(đối với hai camera đồng trục, đặt song song với nhau và cách nhau một khoảng D đã biết):

                      Z = fx*D/(Xright-Xleft)

                      Ở đây:
                      - Z là khoảng cách từ camera tới đối tượng cần đo
                      - fx là tiêu cự của camera chúng ta tìm thấy được sau khi thực hiện Calibration chúng.
                      - D là hằng số, khoảng cách giữa hai camera(tính bằng mét)
                      - Xright: hoành độ của tâm mục tiêu do camera bên phải quan sát được
                      - Xleft: hoành độ của tam mục tiêu do camera bên trái quan sát được

                      Có một số các phương pháp bạn có thể sử dụng để xác định khoảng cách. Hy vọng cách mà tôi nêu ở trên là đủ để giúp bạn hiểu vấn đề mà bạn đang quan tâm.

                      Tôi xin nói thêm là để chuẩn camera của bạn(tìm ra tiêu cự Camera), bạn có thể download một toobox được nhúng trong Matlab có thể sử dụng OK với một tutorial kèm theo. Tôi cũng viết một phần mềm nhỏ để calibrate cho camera theo thuật toán của Zhengyou Zhang, nếu bạn cần thì hãy post ý kiến của bạn lên.

                      Chúc vui !

                      Em cũng đang đọc phần Calib, anh có thể cho em tham khảo thuật toán của Zhang được không . Bằng việc tính khoảng cách từ độ sâu ảnh thì có những thuật toán nào? Thuật toán nào là tối ưu? (Em cũng search thì được biết thuật toán dùng 4 nguyên tắc cơ bản: Graph Cut, Believe Propagation, Region Base/Block Matching, Dynamic programming nhưng cũng chưa rõ lắm ).

                      Em cũng muốn hỏi là nên sử dụng loại Webcam nào là phù hợp (tốc độ fps, độ phân giải, hãng sản xuất, ...).

                      Em cũng tìm được một video demo về vấn đề này:


                      Em cũng muốn viết một chương trình tương tự như vậy. Mong các anh giúp em cái hướng.

                      Comment


                      • #41
                        Em đang tìm hiểu cách tính khoảng cách tới đối tượng bằng hai camera từ độ sâu ảnh thu được (các điểm gần camera thì sáng hơn).
                        Em đang đọc bắt đầu đọc chương 11 (Camera Models and Calibration ) + 12 (Projection and 3D Vision) trong cuốn Learning OpenCV của OReilly. Em muốn các anh giúp cho cái hướng đi. Cũng mới bắt đầu tìm hiểu nên hỏi hơi gà. Em cũng xem một số thread về vấn đề này.

                        Như của anh compvis:
                        Nguyên văn bởi compvis Xem bài viết
                        Câu hỏi của bạn Diep khá thú vị, và bạn có thể tìm hiểu về vấn đề này qua nhiều openproject được post ở trên mạng. Để Webcam của bạn capture được hình ảnh đỏi hỏi bạn phải có trình điều khiển thiết bị để điều khiển nó (Device Driver). Khi bạn đã điều khiển được Webcam rồi, bạn phải xây dựng cấu trúc dữ liệu định dạng hình ảnh nhận được từ webcam (chẳng hạn như các cấu trúc mà chúng ta đã biết như bmp, jpg, IplImage<Intel Corporation>...) và xây dựng các hàm vào ra thao tác với hình ảnh. Vấn đề tìm khoảng cách tới đối tượng, bạn phải sử dụng 2 camera, calibrate chúng và sử dụng công thức sau đây để tình toán khoảng cách(đối với hai camera đồng trục, đặt song song với nhau và cách nhau một khoảng D đã biết):

                        Z = fx*D/(Xright-Xleft)

                        Ở đây:
                        - Z là khoảng cách từ camera tới đối tượng cần đo
                        - fx là tiêu cự của camera chúng ta tìm thấy được sau khi thực hiện Calibration chúng.
                        - D là hằng số, khoảng cách giữa hai camera(tính bằng mét)
                        - Xright: hoành độ của tâm mục tiêu do camera bên phải quan sát được
                        - Xleft: hoành độ của tam mục tiêu do camera bên trái quan sát được

                        Có một số các phương pháp bạn có thể sử dụng để xác định khoảng cách. Hy vọng cách mà tôi nêu ở trên là đủ để giúp bạn hiểu vấn đề mà bạn đang quan tâm.

                        Tôi xin nói thêm là để chuẩn camera của bạn(tìm ra tiêu cự Camera), bạn có thể download một toobox được nhúng trong Matlab có thể sử dụng OK với một tutorial kèm theo. Tôi cũng viết một phần mềm nhỏ để calibrate cho camera theo thuật toán của Zhengyou Zhang, nếu bạn cần thì hãy post ý kiến của bạn lên.

                        Chúc vui !

                        Em cũng đang đọc phần Calib, anh có thể cho em tham khảo thuật toán của Zhang được không . Bằng việc tính khoảng cách từ độ sâu ảnh thì có những thuật toán nào? Thuật toán nào là tối ưu? (Em cũng search thì được biết thuật toán dùng 4 nguyên tắc cơ bản: Graph Cut, Believe Propagation, Region Base/Block Matching, Dynamic programming nhưng cũng chưa rõ lắm ).

                        Em cũng muốn hỏi là nên sử dụng loại Webcam nào là phù hợp (tốc độ fps, độ phân giải, hãng sản xuất, ...).

                        Em cũng tìm được một video demo về vấn đề này:


                        Em cũng muốn viết một chương trình tương tự như vậy. Mong các anh giúp em cái hướng.

                        Comment


                        • #42
                          Google it: Zhengyou Zhang + calibration papers
                          Calib projects using OpenCV & results:
                          http://dsynflo.blogspot.com/2010/03/...ng-opencv.html,
                          http://www.aishack.in/2010/07/calibr...-in-c-oh-yeah/,
                          http://dasl.mem.drexel.edu/~noahKuntz/openCVTut10.html,
                          http://byu-robotic-vision.googlecode...tereoCalib.cpp
                          ......

                          Comment


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

                            Comment


                            • #44
                              Hehe. Cảm ơn anh compvis. Em đã xong phần calib và tính toán cho ra bản đồ độ sâu rồi, nhưng thực hiện với ảnh tĩnh. Em đang thử viết thu video về chạy đồng thời. Sử dụng thư viện videoInput xem sao.

                              Mà tiện cho em hỏi, trong robo vision có những thuật toán nào tránh vật cản, nếu đã dùng stereo vision nên chăng dùng kết quả bản đồ độ sâu (depth map).
                              Last edited by ooooo; 29-04-2011, 08:58.

                              Comment


                              • #45
                                Cha cha, sau mấy ngày nghỉ cuối cùng cũng đã chạy stereo video và xuất bản đồ độ sâu được rồi. Bây giờ em có hai vấn đề cần giúp đỡ:
                                + Tốc độ video hơi chậm (em dùng 2 con WC Logitech C200), một phần là em cho chạy đơn luồng. Em có xem qua vấn đề chạy đa luồng, ở đây em muốn nó chạy dual nhưng mà chưa rõ cách giải quyết (google rồi nhưng mà vẫn chưa thấm ).
                                + Phân vùng cho khu vực có vật cản trước Webcam.

                                Trong thời gian chờ các anh giúp đỡ, em cũng tranh thủ đọc thêm và giải quyết. Cảm ơn các anh.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X