Top Ad unit 728 × 90

Latest news

recent

Cài đặt thư viện OpenCV 1.1v

Open CV là bộ thư viện mã nguồn mở về Computer Vision của Intel. Nó cung cấp một bộ mã nguồn bao gồm hàng trăm hàm, lớp mà ứng dụng các thuật tóan về xử lý ảnh cũng như Computer vision dùng ngôn ngữ C/C++. Trước khi bạn sử dụng nó đương nhiên trên máy phải có bộ công cụ phát triển VS 6.0, VS.Net của microsoft. Khi viết bài này tôi sử dụng với Visual studio .Net 2008 cho các dự án của mình.

Vui lòng thực hiện các bước sau đây để cài đặt Open CV:

1. Download bản cài đặt Open CV tại đây. Tốt nhất bạn nên sử dụng bản mới nhất.

2. Click vào file cài đặt để cài Open CV vào máy. Sau khi hoàn tất bạn nên có biểu tượng Open CV trên start menu của bạn.

3. Tạo liên kết trong system PATH của Window tới OpenCV DLLs theo các bước sau:
  • Click My Computer –> Properties –> Advanced –> Environment Variables –> Systems variable –> highlight PATH –> Edit.
  • Thêm “C:\Program Files\OpenCV\bin” vào PATH. Đường dẫn của OpenCV DLL files có thể khác một chút tùy theo vị trí bạn cài nó, nhớ phân biệt với các đường dẫn khác bằng dấu (;)
  • Nếu OpenCV của bạn đang được mở, bạn nên đóng nó sau đó mở lại để PATH mới có thể tác dụng.
4. Sau khi đã cài đặt xong Open Cv nó sẽ tự động detect được bộ VS 2005 trên máy tính của bạn. Tiếp theo bạn phải mở VS lên để cấu hình các thông tin reference về đường dẫn file .h, library trong GLOBAL OPTIONS. Việc này sẽ giúp bạn chỉ cần làm một lần mà không cần thực hiện config cho mỗi dự án có sử dụng OPEN CV. Vui lòng theo dõi các hình sau để có thể tiến hành từng bước.




Sau khi hòan tất các bước giờ bạn có thể bắt đầu phát triển với Open CV. Điểm xuất phát tốt nhất cho mọi người đó là hãy thử với các example trước :). Và bạn sẽ không khỏi thắc mắc tại sao chương trình biên dịch lại báo lỗi, hì hì đừng lo lắng hãy vào trang property của project và thực hiện tiếp những gì còn sót lại :p


Nếu vẫn còn lỗi liên kết xảy ra bạn có thể thử thêm vào một số lib nữa tùy theo các hàm mà bạn đã sử dụng: odbc32.lib odbccp32.lib cxcored.lib cvd.lib highguid.lib cv.lib cvaux.lib

Trong trường hợp bạn đang dùng OpenCV 2.x vui lòng xem thêm ở đây.


Binh Nguyen - Bioz
Cài đặt thư viện OpenCV 1.1v Reviewed by Bioz on 8:17:00 PM Rating: 5

43 comments:

  1. cám ơn bạn rất nhiều vì đã chia sẻ. mình cũng đang tìm cách cấu hình. Thanks bạn nhiều. nick của mình vanthuong420@yahoo.com.

    ReplyDelete
  2. Anh cho em hỏi cùng một chương trình nhưng tại sau có máy chạy được máy chạy không. Khi build thi không có lỗi nhưng khi chạy nó báo 1 số lỗi gì đó ,ví dụ như :
    "Unhandled wxception at 0x00eda9ad in OPENCV_AVI.exe:0x00000005
    Access vio;ation reading location 0xffffffff"
    nguyên nhân và cách khắc phục như thế nào? Thanks
    mail cua em "vophuocloc89@gmail.com

    ReplyDelete
  3. trong lập trình lỗi runtime này xãy ra thường do truy xuất vùng nhớ không hợp lệ. ví dụ em cấp phát một vùng nhứ A từ 1 -> 200 nhưng trong quá trình duyệt ảnh hay xử lý vì lý do nào đó em di chuyển con trỏ tới truy xuất vào vùng 201 hay em truy xuất vào vùng 200 nhưng tại vùng đó có memory error. Lỗi này có thể vẫn ok trong một số trường hợp vùng 201 chưa được sử dụng bởi process khác hay vì lý do nào đó nó vẫn được phép. Đó chính là lý do vì sao máy này chạy được máy khác không, tuy nhiên dù sao thì để sửa em chỉ cần rà sóat kỉ lưỡng tại các chổ có dùng con trỏ, cấp phát bộ nhớ là được, chú ý các vòng lặp duyệt hình hay mảng.

    ReplyDelete
  4. Em vẫn chưa hiểu rõ lắm, khi minh khai báo 1 biến hay con trỏ, ví dụ như mình khai báo "CvMemStorage*storage" thì khi build tự động nó lựa chọn vùng nhớ cho mình, cũng như vi điều khiển khi viết bằng C++ thì mình đâu cần quan tâm tới vùng nhớ, việc chọn ô nhớ ở đâu là do trình biên dịch. Vậy làm sau mà có thể quản lý được vùng nhớ? Các vòng lập, các hàm các con trỏ khi bị báo lỗi về vùng nhớ thì có thể sửa ở đâu cho hết:
    "CvHaarClassifierCascade *cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
    CvMemStorage* storage = cvCreateMemStorage( 0 );"

    ReplyDelete
  5. ở trên khi anh nói tới lỗi này thì em chỉ tập trung vào những nơi em cấp phát bằng malloc và nhưng nơi mà em di chuyển hay truy xuất vùng nhớ. Ví dụ: int *abc = (int*)malloc(xcv);
    *(abc) = 12; *(abc + 100) = 43; ...
    Đây là những nơi sẽ xảy ra lỗi như trên. Còn khi em sử dụng thư viện thì bên trong đó có nhiều vấn đề, thật khó có thể nói chỉ với vài dòng. ở đây chỉ đưa ra gợi ý. Em thử tải về ví dụ sử dụng Haar ở đây rồi so sánh xem mình có gì sai ko: http://www.box.net/shared/ezliykp8fa

    ReplyDelete
  6. à kiểm tra lại xem 2 máy có dùng cùng version OPenCV hay ko :)

    ReplyDelete
  7. Anh Bình ơi cho em hỏi:
    Về lỗi cấp phát vùng nhớ thì em đã hiểu, em cũng đã dò tới vị trí các con trỏ và biết tại dòng nào gây ra lỗi. thường là trong các vòng lặp. Nhưng làm sau để sửa lỗi này,ý em là làm sau mình có thể xóa vùng nhớ cũ để cho nó có chỗ ghi dữ liệu mới, hoặc là làm sau để cấp phát vùng nhớ ở các ô nhớ khác để không bị trùng hoặc khai báo vùng nhớ rộng hơn chẳng hạn.Đây không phải là chuyên ngành của em,nhưng vì em thích nên hy vọng anh có thể nói rõ một tí. Ở đây em có 1 đoạn code:
    IplImage* img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
    img1=cvLoadImage ("C:\\3.jpg",1);
    CvScalar s1;
    cvShowImage ("Picture",img1);
    cvWaitKey (0);
    i=img1->width/2 ;j=img1->height/2 ;
    for(t1=0;t1<i;t1++)
    for(t2=0;t2<j;t2++)
    {
    s1=cvGet2D (img1,t1,t2);
    //s.val [0]=0;
    s1.val [1]=0;
    s1.val [2]=0;
    cvSet2D (img1,t1,t2,s1);
    }
    cvShowImage ("Picture",img1);
    cvWaitKey (0);
    cvReleaseImage (&img1);
    cvDestroyAllWindows ();
    khi em để i=width và j=height thì nó báo lỗi vùng nhớ 0x7...., nhưng khi để i=width/2, j=height/2 thì chạy ok, em nghĩ là do thiếu vùng nhớ trong vòng lập. ngoài ra em còn thừơng bị một số lỗi do con trỏ như là: CvHaarClassifierCascade *cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 ); tại đây cũng bị trùng vùng nhớ, cách khác phục nó như thế nào, một số con trỏ sau một lần lặp có cần dùng hàm cvClear... ko?
    Hy vọng anh dành tí thời gian giúp đỡ Thanks!

    ReplyDelete
  8. IplImage* img1=cvLoadImage ("C:\\3.jpg",1);

    thông thường image sẽ được load như thế này (nếu nhớ ko lầm, lâu rồi ko nghía). hàm LoadImage sẽ tự động tạo ra instant của đối tượng IplImage với các thông số tương ứng với bức ảnh được load rồi lưu địa chỉ vào con trỏ img1. Trong trường hợp trên bạn cấp phát vùng nhớ cho img1 trước vậy sẽ không chắc là kích thước bạn cấp phát với size của hình là giống nhau nên có thể gây ra lỗi. Thông thường ở lập trình cấp độ nhúng bạn mới quan tâm bộ nhớ cấp phát sẽ được cấp ở đâu còn trên môi trường PC chúng ta giao hết cho hệ điều hành. Chúng ta chỉ quan tâm đến kích cở bộ nhớ cần cấp, địa chỉ nhớ (pointer) trả ra sau khi cấp và khi nào cần hủy bỏ bộ nhớ để tiết kiệm. Nếu bạn sử dụng lib thì bên trong các hàm có thể có họat động cấp phát vìdụ cvCreateImage, địa chỉ vùng cấp có thể truy cập qua con trỏ img1, size có thể kiểm tra bằng sizeof(xxx), khi hết dùng có thể hủy bằng cvReleaseImage. Với những vùng nhớ do bạn tự cấp phát thì dùng malloc, giải phóng thì dùng free(xxx). Lỗi của bạn là do bạn chưa hiểu cặn kẻ cách sử dụng OpenCV thôi nên vui lòng coi thêm http://vn.360plus.yahoo.com/vnntb/article?mid=184 để làm cho đúng sẽ tự nhiên ko còn lỗi :) đó là cách giải quyết cơ bản!

    ReplyDelete
  9. Em chào anh!
    Anh ơi cho em hỏi, em cài thư viện opencv trên vs2008, nhưng bản của em là bản express, nó không có phần tạo ứng dụng MFC, vậy em có thể tạo một ứng dụng sử dụng thư viện opencv với bản express mà có ứng dụng giao diện không ạh.
    Em cảm ơn anh

    ReplyDelete
  10. - em có thể dùng win 32 console.
    - dùng window form APP.
    - cài mới VS2008 (cái này o VN Free mà :))
    - chuyển sang dùng OpenCV trên C# như GMUCV.

    - gởi Email cho tôi: binh.nguyen@sectic.com
    tôi sẽ gởi mã nguồn ví dụ xài window form APP cho bạn

    ReplyDelete
  11. Chào em, em có thể thử một trong các cách sau:
    1. Cài thêm bộ Windows Driver Kit, sau khi cài xong sẽ có thêm thư viện MFC42 và ATL71, add các thư viện này vào VS 2008 Express, em xem hướng dẫn ở đây: http://www.codeproject.com/KB/MFC/MFCinVisualStudioExpress.aspx
    2. Cài thêm Qt Libraries cho VS 2008 Express, đây là một framework đa platform hỗ trợ cho việc tạo các ứng dụng GUI. Tham khảo tại đây: http://qt.nokia.com/downloads. Nó còn có cả IDE riêng (free), cứ bình tĩnh mà chọn lựa.
    Nhưng tóm lại, em ko nên đi theo con đường tà đạo này, coi chừng tự rướt khổ vào thân. Tốt nhất là cứ cài bản VS có hỗ trợ MFC.
    Chúc em thành công.

    ReplyDelete
  12. Bioz: Em cảm ơn anh nhiều nhé. Mail em là: thuybn27887@gmail.com.

    Boban: Em cảm ơn anh nhiều, hì em sẽ tham khảo, nhưng chắc chỉ cho biết thui. hì. Thanks anh nhiều nhé.

    Em chúc 2 anh luôn vui vẻ

    ReplyDelete
  13. Cảm ơn em, vì thái độ dễ thương của em mà anh sẽ rất hài lòng khi được giúp em! Hy vọng những người khác khi muốn nhận được hỗ trợ của IEEV cũng sẽ học hỏi được điều này từ em. Một việc đơn giản nhưng tiếc là không phải ai cũng biết cách :)

    ReplyDelete
  14. Hi, Chúc anh buổi sáng tốt lành!
    Trước tiên em cảm ơn vì lời khen đó. hì.
    Anh ơi em hỏi chút nhé: khi em tạo một button để lấy ảnh từ bên ngoài vào, và ảnh được load vào sẽ được hiển thị trên một picture control, mà ảnh đầu vào của em có kích thước là 1200x 1600, vậy để hiển thị được ảnh vào picture control đó thì em có phải tạo một ảnh có kích thước xác định trước sau đó mới dùng hàm load ảnh vào không hả anh?
    Em cảm ơn anh.

    ReplyDelete
  15. Tuần tự xử lý của em sẽ như sau:
    - tạo hàm bắt sự kiện click button.
    - Load ảnh vào bằng hàm CV image load
    lưu ý là sau hàm này thì một đối tượng IPLImage chứa thông tin cấu hình ảnh và nội dung pixel của ảnh sẽ được tạo và trả ra (em không cần create trước đối tượng ảnh này).
    - Kiểm tra xem load hình thành công không?! kiểm tra xem kích thước phù hợp không?! nếu không phù hợp thì tạo ra một IPLImage với kích thước mong muốn bằng hàm cvcreateimage rồi dùng hàm cvResize để xừ lý chuyển hình vừa load qua đối tượng đó.
    Lưu ý kích thước hiển thị và kích thước xử lý bên trong chương trình là khác nhau nên quá trình làm đôi khi tạo ra nhìều IPLImage khác nhau cho từng mục tiêu.
    - Tiến hành xử lý
    - Xuất dữ liệu hình IPLImage ra image box hay Bitmap để gán vào picture control.
    - Hũy bộ nhớ cho IPLImage bằng cvImagerelease

    http://nashruddin.com/opencv-examples-for-operation-on-images.html

    http://www.linuxconfig.org/resize-an-image-with-opencv-cvresize-function

    em xem tuần tự từng trang một của hai bài viết này và làm theo nó để làm quen và hiểu cách sử dụng. Ngoài ra để nâng cao em hãy đọc các bài viết của anh trong phần kỉ thuật triển khai để hiểu về bản chất bộ nhớ khi đọc hình, cấu trúc vùng nhớ từ đó sẽ sử dụng, cấp phát hợp lý hơn.

    ReplyDelete
  16. Hì, trước tiên em cảm ơn anh nhé.

    Anh ơi, em vẫn chưa làm được anh ạh.
    - Để xuất dữ liệu hình IPLImage ra bitmap để gán vào picture control như anh nói thì sử dụng lệnh như thế nào hả anh.

    Sắp ngày mới rùi, chúc anh một ngày mới vui vẻ nhé.

    ReplyDelete
  17. cái này phải xem em đang sử dụng nền tảng nào, MFC, Winform C++, C# ...và lọai control em dùng để hiển thị ảnh. Tùy lọai control mà nó nhận vào các source khác nhau có thể là Bitmap, Image stream, ... tùy theo source đó mà em duyệt pixel của IPLImage rồi chuyển dữ liệu sang một đối tượng khác thích hợp để hiển thị lên control đó. Em hãy mô tả cụ thể thứ em cần, nếu rảnh anh sẽ giúp em một ví dụ mẫu. Tuy nhiên thì vì em là dân CNTT chuyên nghiệp nên em nên ráng tìm hiểu để tự thực hiện.

    ReplyDelete
  18. Hì, Một ngày mới tốt lành nha anh.
    - Em xử dụng MFC làm nền tảng để xây dựng anh ạh, và em sử dụng vs2005.
    - Cụ thể ứng dụng của em là như sau:
    + Thứ nhất: em sẽ sử dụng một button để thực hiện load ảnh, ảnh được lấy sẽ hiển thị lên một picture control.
    + Một button để thực hiện sử lý ảnh vừa lấy vào, và đầu ra là một ảnh đã được xử lý và cũng sẽ được hiển thị lên một picture control.
    - Có thời gian, anh giúp em với nha.
    Em cảm ơn anh nhiều!

    ReplyDelete
  19. Em tham khảo source code ở đây:
    (Project VS 2010 - OpenCV 2.1)
    http://www.box.net/shared/44pfkqo4e4
    Giải pháp:
    1. Lấy HDC của Picture Control
    2. Copy ảnh IplImage sang CvvImage (lớp đối tượng này thuộc C++ interface của OpenCV)
    3. Dùng hàm DrawToHDC của lớp đối tượng CvvImage để vẽ ảnh lên Picture Control.
    Anh nghĩ kỹ thuật này khá đơn giản, em có thể tham khảo source code và tự cài đặt.

    ReplyDelete
  20. Boban: Em cảm ơn anh!
    Hì chúc anh luôn vui vẻ, và luôn chia sẻ và cùng mọi người làm giàu kho tàng kiến thức này. ^ _ ^

    ReplyDelete
  21. Ngày mới tốt lành, anh nhé.
    Trước tiên em xin cảm ơn anh ạh.
    Anh ơi, em đã tham khảo và biên dịch: nhưng nó lại báo lỗi như sau ạh:

    error C2143: syntax error : missing ')' before ';'
    error C2059: syntax error : ')'

    mà chính là cú pháp của đoạn lệnh sau:

    CvSize ImgSize;
    ImgSize.height = Image_height;
    ImgSize.width = Image_width;
    IplImage* TheImage;
    TheImage =cvCreateImage(ImgSize,IPL_DEPTH_8U,Image_Channel);

    - Em không biết là tại saov anh àh, anh xem giúp em nhé.
    Hì.

    ReplyDelete
  22. CvSize ImgSize = cvSize(Image_width, Image_height);

    IplImage* TheImage;
    TheImage =cvCreateImage(ImgSize,IPL_DEPTH_8U,Image_Channel);
    - đảm bảo giá trị của Width, height, image chanel (1 hay 3) đã có.

    - đảm bảo là em đang dùng OPENCV 2.0 trở lên và setting thư viện đã chạy tốt trước khi làm. Check điều này bằng cách viết một hello world đơn giản trước. Anh đề nghị em nên đi từng bước, hãy chạy một số ví dụ đơn giản như load hình xuất hình ... trong cái link anh gởi ở comment trên sau đó, khi mọi thứ ok e hãy tiếp tục. Hiện em đang tiếp cận vấn đề mà bỏ qua căn bản nên rất khó mà giúp em theo cách này được. Hãy cài đặt, setting, đọc tài liệu để play với các ví dụ, khi thành thục rồi hãy làm tiếp.

    ReplyDelete
  23. Bioz: You right :)
    Thuydinh: Em có thể gởi đống code của em qua địa chỉ email boban.ieev@gmail.com.

    ReplyDelete
  24. Chào a Bioz!
    trong OpenCV đối với việc lấy dữ liệu từ webcam qua cổng USB đc thực hiện bằng câu lệnh
    CvCapture* capture = cvCreateCameraCapture(0)

    Vậy đối với loại wifi IP camera thì mình có thể dùng hàm trên đc ko.Theo e đc bít thì ta có thể lấy dữ liệu từ wifi IP Camera về trình duyệt IE như vậy ta có thể lấy dữ liệu bằng câu lệnh này đc ko?
    CvCapture * capture = cvCreateFileCapture("http://172.16.0.201");
    //với http://172.16.0.201 là địa chỉ URL mà ta nhận được dữ liệu của wifi IP camera.
    MOng anh giúp đỡ!

    ReplyDelete
  25. hiện nay có 2 dạng camera, dạng 1 bao gồm là CCTV, Webcam, ... dạng 2 là IPNetwork camera. Sự khác biệt của hai dạng này là một bên kết nối trực tiếp vào máy tính và dựa vào tính hiệu analog. Còn một bên thì hoạt động độc lập với 1 IP và phát video, voice đã được mã hóa dưới dạng kỉ thuật số như: MJPEG, H.264, MPEG4, ... Để phát được video thì IPNC camera phải họat động như là 1 video server, web server. Nó sẽ vừa capture video, mã hóa, lọc, stream, ... Việc stream video đi thông thường được IPNC camera thực hiện dựa vào giao thức RTP/RSTP hay HTTP stream. Với giao thức RTP/RSTP có thể hỗ trợ truyền mọi định dạng từ H264, MPEG4 đến MJPEG. Tuy nhiên HTTP stream thông thường chỉ dành cho MJPEG. Dựa vào câu hỏi của em thì đoán là em muốn hỏi về HTTP stream với MJPEG. Hiện OpenCV 2.2 hỗ trợ việc stream tất cả định dạng và giao thức đề cập ở trên thông qua bộ mã nguồn mở FFMPEG, direct show, VFW... tích hợp trong nó. Tuy nhiên với HTTP thì tùy theo từng loại camera của từng hãng mà em phải truyền query cho đúng. Đôi khi có camera còn đòi authenticate (user/pass). Sắp tới anh sẽ đề cập tới vấn đề này trong một bài viết cụ thể hơn

    ReplyDelete
  26. e có đọc tài liệu camera của hãng axis.Nó có cung cấp 1 source code như thế này:
    #include
    #include "opencv.hpp"


    int main(){

    CvCapture *camera=cvCaptureFromFile("http://username:pass@cam_address/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg");
    if (camera==NULL)
    printf("camera is null\n");
    else
    printf("camera is not null");

    cvNamedWindow("img");
    while (cvWaitKey(10)!=atoi("q")){
    double t1=(double)cvGetTickCount();
    IplImage *img=cvQueryFrame(camera);
    double t2=(double)cvGetTickCount();
    printf("time: %gms fps: %.2g\n",(t2-t1)/(cvGetTickFrequency()*1000.), 1000./((t2-t1)/(cvGetTickFrequency()*1000.)));
    cvShowImage("img",img);
    }
    cvReleaseCapture(&camera);
    }
    Thấy có nhập id và pass.

    tks anh Bioz nhìu nha.Rất chờ đợi bài viết của a.

    ReplyDelete
  27. ví dụ này là chính xác, đây là chuẩn query phổ biến hiện nay. Một số Hãng khác public đường dẫn khác ví dụ như thay vì axis-cgi/mjpg/video.cgi thì họ có thể dùng /ipcam/mpeg.cgi.
    Hoan nghênh tinh thần chia sẻ của em :)

    ReplyDelete
  28. Anh Bioz ơi anh có thể viết bài hướng dẫn cài opencv 2.2 được không, anh cho em hỏi, em dùng vc6 dùng được không,(tại em dùng vc6, và 2005 bị lỗi hoài àh)

    ReplyDelete
  29. với phiên bản 2.2 thì mọi platform đều được, em bắt buộc phải tạo project source cho opencv theo platform mới bằng cmake rồi biên dịch lại để có dll, lib tương ứng. dll Mặc định 2.2 biên dịch bởi vs2010.

    http://www.ieev.org/2010/01/cai-at-thu-vien-opencv-2x.html

    ReplyDelete
  30. Dạ chào anh, anh có thể hướng dẫn em các bước để load 1 bức ảnh vào 1 form được không ạ? Em dùng VS 2010 để tạo Windows form app nhưng không biết làm thế nào để đưa bức ảnh vào. Em cảm ơn anh.

    ReplyDelete
  31. Vì lý do rất nhiều bạn hỏi về vấn đề này nên anh đã có kế hoạch thực hiện 2 mẫu chương trình dành cho OPENCV xử lý với image, video để mọi người tham khảo. Em vui lòng đợi, chúng sẽ được public trước 20/06. IEEV ko đáp ứng các yêu cầu cá nhân liên quan tới mã nguồn và chương trình.

    ReplyDelete
  32. Em cảm ơn comment trả lời của anh, rất mong chờ bài viết OPENCV xử lý image và video dùng winform app của anh.
    Em đã email xin phần ví dụ về MFC(do comment ở trên a nói là mail để lấy phần ví dụ)
    "- gởi Email cho tôi: binh.nguyen@sectic.com
    tôi sẽ gởi mã nguồn ví dụ xài window form APP cho bạn "
    Mong anh check mail, em cảm ơn, chúc anh 1 ngày làm việc hiệu quả!

    ReplyDelete
  33. đó là ví dụ dùng để sử dụng opencv, nó mở một opencv view để xem ảnh chứ không tích hợp vào form. Với cái này thì em có thể thấy ở nhiều nơi. Còn yêu cầu của em thì hiện anh cũng đã viết và có sẵn, tuy nhiên thì anh không muốn việc này trở thành thông lệ nên sẽ không gởi code cho từng người nữa :) ... bất kì ai. Hy vọng em hiểu cho nỗi khổ của một người lực bất tòng tâm :)

    ReplyDelete
  34. Dạ em hiểu rồi. Cảm ơn anh đã trả lời! :)

    ReplyDelete
  35. Chào anh Bioz! Em có 1 vấn đề muốn hỏi anh thế này. Mấy hôm trước em cài bản vs2010 nhưng do yêu cầu của cô giáo nên em xóa đi cài bản vs2008 và sử dụng opencv 1.1 nhưng em toàn gặp lỗi " The application failed to initializee properly (0xc0150002). Click on OK to terminate the application" khi build chương trình kể cả khi em release. Ko biết lỗi này sửa thế nào ạ? Em mới tập dùng vs và opencv nên gà mờ ko biết làm thế nào?

    ReplyDelete
  36. vấn đề có thể do xung đột version của opencv trên máy em hoặc bản lib opencv của em được build cho VS2010 nhưng lại chạy với dự án 2008. Anh chỉ đoán vậy. Để biết cụ thể em hay uninstall toàn bộ opencv trên máy, download dự án ví dụ về OPENCV của IEEV là VnPLibs.CVs trong phần sản phẩm. Hiện nó được set up cho cả 2008 và 2010 với bản Opencv 2.0 tích hợp sẵn trong project (em ko cần cài opencv). Muốn chuyển sang 1.1 em chỉ đơn giản down header file, lib, và dll về rồi thay thế các file hien có, đổi tên trong project property là xong. Còn không thì dùng luôn bản hiện đã được cấu hình cũng được.

    ReplyDelete
  37. Hi anh Bioz Nguyen!
    đây là đoạn code trong lớp nhận diện khuôn mặt từ một image tải lên
    anh có thể giái thích đoạn này giúp em được không ạ
    thanks anh! :d

    if( cascade_face )
    {
    CvSeq* faces = cvHaarDetectObjects( small_img,cascade_face, storage_face,
    1.1,2,0, cvSize(30, 30) );
    // Draw a rectagle around all detected face
    for( i = 0; i < (faces ? faces->total : 0); i++ )
    {
    CvRect r = *(CvRect*)cvGetSeqElem( faces, i );
    cvRectangle( img, cvPoint(r.x*scale,r.y*scale),cvPoint((r.x+r.width)*scale,(r.y+r.height)*scale),CV_RGB(255,0,0),3,8,0 );
    }
    }

    ReplyDelete
  38. - tôi chẳng nhớ cụ thể thế nào, với bạn đưa cái đoạn thế này thì cũng khó, nên tôi giả sử bạn đúng thì nhìn vào code không khó để suy luận.
    - CvSeq* faces = cvHaarDetectObjects( small_img,cascade_face, storage_face, 1.1,2,0, cvSize(30, 30) ); -> trả ra danh sách các khuôn mặt được detect trong hình.
    - for{} -> dựa vào danh sách các khuôn mặt, region, để vẻ hình vuông bao khuôn mặt lên hình.

    ReplyDelete
  39. Em mới đang bắt đầu tìm hiểu về phát hiện khuôn mặt, rất mong các anh chỉ cho em nên bắt đầu từ đâu? chân thành cảm ơn

    ReplyDelete
  40. điểm khởi đầu tốt nhất cho em là đọc bài viết này:
    http://www.ieev.org/2010/03/adaboost-haar-features-face-detection.html

    theo các comment trong đó cũng như các link tham khảo trong comment.

    ReplyDelete
  41. Chào anh !
    Em có load thử theo cái ví dụ của 1 bạn và hướng dẫn của anh như sau
    "ví dụ này là chính xác, đây là chuẩn query phổ biến hiện nay. Một số Hãng khác public đường dẫn khác ví dụ như thay vì axis-cgi/mjpg/video.cgi thì họ có thể dùng /ipcam/mpeg.cgi."
    Em có thử http://myip/mjpeg.html hoặc http://myip/mjpeg.cgi thì stream chỉ được trên web còn vào trong chương trình thì hoàn toàn không hiển thị được !
    Anh có kinh nghiệm về vấn đề này không anh chỉ giúp em với ! Camera em sử dụng là loại Compro ip70
    Em cảm ơn anh !

    ReplyDelete
  42. lý do của thất bại là do từ một đường dẫn HTML có rất nhiều vẫn đề xảy ra, ví dụ có redirect, có URL parsing ... rồi mới trả ra kết quả chứ không hẳn kết quả trả về ngay trực tiếp, ngoài ra response cũng có thể không chỉ là video mà con là html, script để run video. Đó là lý do mà opencv không thể handle được mọi tình huống. Đoán là nó chỉ handle được tình huống trả về là raw mPEG. Em hãy dùng webbrowser kiềm tra lần luột các URL rồi kiểm tra viewsource tranng web kết quả em sẽ hiểu, đây là kiến thức căn bản trong HTML và web program thôi.

    ReplyDelete

chia sẻ cho chúng tôi ý tưởng hay khó khăn của bạn ...

All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.