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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • compvis
    Thành viên tích cực
    • May 2006
    • 247

    #16
    Nguyên văn bởi hoang bui Xem bài viết
    ah`. a nthung có thể cho e hỏi về phần code được không ạ, e có chạy chương trình, nhưng mà không hiểu là hàm
    cvCvtColor( src, gray, CV_BGR2GRAY );
    chạy như thế nào, e chạy mãi mà vẫn không đc, nó cứ báo lỗi ở:
    CV_DBG_BREAK();
    nếu được thì a xem jup' e nha,
    src và gray phải cùng width, height
    src: 1,2,3 or 4 channels, not null
    gray: 1 channel = cvCreateImage(from src) là tốt nhất

    thử cái coi

    Comment

    • nthung2002
      Thành viên chính thức
      • Oct 2010
      • 38

      #17
      Lệnh cvCvtColor dùng để chuyển từ ảnh màu về ảnh xám. Vì vậy trước khi chuyển ảnh src_img về ảnh dst_img bạn cần phải khai báo:
      dst_gray = cvCreateImage(cvSize(src_img->width, src_img->height), IPL_DEPTH_8U, 1);
      //ảnh dst_gray phải cùng kích thước với ảnh ban đầu, 8U có nghĩa là 8 bit (256 mức xám), 1: vì ảnh xám chỉ có một kênh màu xám. (ảnh màu thường có 3 kênh R, G, B)
      Sau đó bạn mới dùng lệnh cvCvtColor như sau:
      cvCvtColor(src_img, dst_gray, CV_BGR2GRAY);
      //The source 8-bit (8u), 16-bit (16U)
      //or single-precision floating-point (32f) image
      //The destination image of the same data type as the source.
      //The number of channels may be different
      Nếu ảnh ban đầu đã là ảnh xám rồi thì bạn không cần phải chuyển nữa. Bạn có thể kiểm tra bằng lệnh sau:
      if(src_img->nChannels != 1)
      {
      cvCvtColor(src_img, dst_gray, CV_BGR2GRAY);
      }
      else
      {
      dst_gray = src_img;
      }

      Chúc bạn học tốt lập trình với OpenCV
      Last edited by nthung2002; 02-12-2010, 15:39.

      Comment

      • nthung2002
        Thành viên chính thức
        • Oct 2010
        • 38

        #18
        Sử dụng thư viện EMGU trong Visual C++ 2008 Express

        Nếu bạn gặp khó khăn trong việc sử dụng OpenCV trong Visual C++ 2008 Express, có một sự lựa chọn khác cho bạn đó là thư viện EMGU.
        Bạn có thể vào trang chủ của EMGU tại đây: http://www.emgu.com/wiki/index.php/Main_Page
        Tutorial: http://www.emgu.com/wiki/index.php/Tutorial
        API Documentation: http://www.emgu.com/wiki/index.php/Documentation

        Sau đây là ví dụ minh họa sử dụng thư viện EMGU trong Visual C++ 2008 Express:
        -Trước tiên bạn download các file EMGU DLL trong file đính kèm rồi extract ra.
        - Tạo một project mới (File->New->Project->Window Form Application->...)
        - Tiếp theo là add các file dll vào project: Project->Properties(Alt+F7)->Framework and References->Add New Reference ->Browse->Chọn các file emgu.CV và emgu.CV.UI trong thư mục vừa extract->OK
        -Trong phần trên cùng của Form1.h khai báo thêm dòng lệnh
        using namespace Emgu::CV;
        using namespace Emgu::CV::UI;
        using namespace Emgu::CV::Structure;
        - Đến đây bạn có thể sử dụng các hàm API của thư viện EMGU
        Bạn có thể chạy thử ví dụ đính kèm để biết rõ hơn cách sử dụng thư viện này.
        Attached Files
        Last edited by nthung2002; 02-12-2010, 15:42.

        Comment

        • hoang bui
          Thành viên mới
          • Sep 2009
          • 18

          #19
          chà, vất vả mấy bữa, rồi cuối cùng cũng ra đc hình tròn và hình vuông, còn hình tam giác thì potay. ^^

          Comment

          • arthasherovu
            Thành viên mới
            • May 2009
            • 12

            #20
            Cho mình hỏi là sao mình ko thể capture ảnh bằng hàm captureFromCAM với openCV 1.1 được,
            CvCapture* capture = cvCaptureFromCAM( 0 );
            sau khi capture thì biến capture có giá trị Null ko ah`,mặc dù ko báo lỗi , bạn nào giúp mình zới, mình dùng Webcam của Laptop.
            Thanks
            Last edited by arthasherovu; 14-12-2010, 23:44.
            |

            Comment

            • LCD_4BIT
              Thành viên chính thức
              • Jun 2010
              • 53

              #21
              Nguyên văn bởi arthasherovu Xem bài viết
              Cho mình hỏi là sao mình ko thể capture ảnh bằng hàm captureFromCAM với openCV 1.1 được,
              CvCapture* capture = cvCaptureFromCAM( 0 );
              sau khi capture thì biến capture có giá trị Null ko ah`,mặc dù ko báo lỗi , bạn nào giúp mình zới, mình dùng Webcam của Laptop.
              Thanks
              Mình thấy chẳng có gì sai cả
              Nhưng nếu bạn hiển thị nó lên cửa sổ (window) bạn dùng thêm câu lệnh

              IplImage* frame = 0;
              frame = cvQueryFrame( capture );
              cvshowImage("vidu",frame);
              Bể học vô biên

              Comment

              • compvis
                Thành viên tích cực
                • May 2006
                • 247

                #22
                Nguyên văn bởi arthasherovu Xem bài viết
                Cho mình hỏi là sao mình ko thể capture ảnh bằng hàm captureFromCAM với openCV 1.1 được,
                CvCapture* capture = cvCaptureFromCAM( 0 );
                sau khi capture thì biến capture có giá trị Null ko ah`,mặc dù ko báo lỗi , bạn nào giúp mình zới, mình dùng Webcam của Laptop.
                Thanks
                Thử lại theo cách sau:
                CvCapture* capture = cvCaptureFromCAM(-1);

                Nếu vấn không được, kiểm tra lại wc vì có thể nó đang được sử dụng bởi một ứng dụng khác hoặc reset lại wc của bạn.

                Thân !

                Comment

                • LCD_4BIT
                  Thành viên chính thức
                  • Jun 2010
                  • 53

                  #23
                  Nguyên văn bởi compvis Xem bài viết
                  Thử lại theo cách sau:
                  CvCapture* capture = cvCaptureFromCAM(-1);

                  Nếu vấn không được, kiểm tra lại wc vì có thể nó đang được sử dụng bởi một ứng dụng khác hoặc reset lại wc của bạn.

                  Thân !
                  Vì trường hợp này bạn bảo không có lỗi gì nên chắc là bạn ấy chưa hiển thị được.
                  Nếu wc đang sử dụng ở ứng dụng khác hoặc không tồn tại thì cvCaptureFromCAM() sẽ báo lỗi ngay !
                  Bể học vô biên

                  Comment

                  • arthasherovu
                    Thành viên mới
                    • May 2009
                    • 12

                    #24
                    IplImage* frame = 0;
                    frame = cvQueryFrame( capture );
                    cvshowImage("vidu",frame);
                    mình có phần này luôn và kết quả vẫn vậy, hiện ra màn hình đen báo là biến capture có giá trị null,
                    minh dùng Webcam của laptop và có thử với WC ngoài nhưng cũng zay,
                    mình dùng openCV 1.1 , Win7, chưa cài Platform SKD
                    mình ko biết là có cần cài chương trình gì cho Webcam để có thể open nó bằng OpenCV ko
                    Rất mong được sự giúp đỡ của anh em trong giai đoạn bắt đầu
                    |

                    Comment

                    • LCD_4BIT
                      Thành viên chính thức
                      • Jun 2010
                      • 53

                      #25
                      Nguyên văn bởi arthasherovu Xem bài viết
                      mình có phần này luôn và kết quả vẫn vậy, hiện ra màn hình đen báo là biến capture có giá trị null,
                      minh dùng Webcam của laptop và có thử với WC ngoài nhưng cũng zay,
                      mình dùng openCV 1.1 , Win7, chưa cài Platform SKD
                      mình ko biết là có cần cài chương trình gì cho Webcam để có thể open nó bằng OpenCV ko
                      Rất mong được sự giúp đỡ của anh em trong giai đoạn bắt đầu
                      Mình đoán là bạn để hàm release không hợp lý nên image chưa kịp hiện đã bị release. Tuy nhiên
                      Bạn thử với doạn code này xem sao .

                      int _tmain(int argc, _TCHAR* argv[])
                      {
                      cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
                      CvCapture* capture = cvCaptureFromCAM(0);
                      IplImage* frame;
                      while(1) {
                      frame = cvQueryFrame( capture );
                      if( !frame ) break;
                      cvShowImage( "Example2", frame );
                      char c = cvWaitKey(33);
                      if( c == 27 ) break;
                      }
                      cvReleaseCapture( &capture );
                      cvDestroyWindow( "Example2" );
                      return 0;
                      }
                      Bể học vô biên

                      Comment

                      • arthasherovu
                        Thành viên mới
                        • May 2009
                        • 12

                        #26
                        cụ thể đây là code của mình

                        #include <highgui.h>
                        #include <cv.h>

                        int main( ) {
                        CvCapture* capture = cvCaptureFromCAM( 0 );
                        IplImage* src = NULL;
                        cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );
                        while(1)
                        {

                        src = cvQueryFrame( capture );
                        if( !src ) break;
                        char c = cvWaitKey(33);
                        if (c == 27)
                        {
                        break;
                        }

                        cvShowImage( "Webcam", src );
                        }


                        cvReleaseImage( &src );
                        cvDestroyWindow( "Webcam" );
                        return 0;

                        }


                        kết quả biến src vẫn là giá trị null
                        Mình đoán là do Webcam của mình, nhưng mà mở bằng chương trình CyberLink YouCam thì bình thường
                        Last edited by arthasherovu; 16-12-2010, 23:28.
                        |

                        Comment

                        • LCD_4BIT
                          Thành viên chính thức
                          • Jun 2010
                          • 53

                          #27
                          Nếu bạn dùng Cyberlink youcam thì lúc khởi động opencv có hiện như thế này không?

                          Bể học vô biên

                          Comment

                          • arthasherovu
                            Thành viên mới
                            • May 2009
                            • 12

                            #28
                            Nếu bạn dùng Cyberlink youcam thì lúc khởi động opencv có hiện như thế này không?
                            đúng là như zay đó bạn ah`, còn nếu ko mở Cyberlink thì ko có gì xảy ra cả
                            |

                            Comment

                            • LCD_4BIT
                              Thành viên chính thức
                              • Jun 2010
                              • 53

                              #29
                              Nguyên văn bởi arthasherovu Xem bài viết
                              đúng là như zay đó bạn ah`, còn nếu ko mở Cyberlink thì ko có gì xảy ra cả
                              Ồ không bạn của tôi!

                              Chắc là máy bạn cấu hình hơi yếu rồi, cyberlink chạy hơi nặng đó bạn chờ một lúc cyberlink YouCam nó khởi động lên là được. Tốt nhất là bạn chạy Cyberlink youcam trước đi khi nào thấy biểu tượng của cyberlink nằm ở góc dưới bên phải ở chỗ mấy chương trình như yahoo hay nằm ấy là ok. Nếu cyberlink đang chạy trên desktop thì tắt nó đi.

                              bạn dùng cyberlink có bản quyền không nếu không để mình gửi cho?

                              OK ?

                              Thân!
                              Bể học vô biên

                              Comment

                              • arthasherovu
                                Thành viên mới
                                • May 2009
                                • 12

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

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