|
Tài trợ cho PIC Vietnam |
Xử lý ảnh Các thuật toán xử lý ảnh dùng trong robot |
|
Ðiều Chỉnh | Xếp Bài |
10-11-2007, 03:04 AM | #14 |
Đệ tử 1 túi
Tham gia ngày: Sep 2006
Bài gửi: 24
: |
Đây là trình tự các bạn phải làm để cài, cái vụ này mình công nhận nó ko làm tự nhận đường dẫn nên hơi chuối (chú ý là dùng dotnet nhé, VB, VC... cũng dc nhưng phải là .NET )
Đầu tiên, tải OpenCV gốc và OpenCVDotnet: OpenCV: http://downloads.sourceforge.net/ope...2&big_mirror=1 OpenCVDotNet: http://opencvdotnet.googlecode.com/f...-0.7-setup.exe Sau khi download về, cài OpenCV (lấy từ cái link đầu tiên) vào thư mục c:\Program Files\OpenCV (chính xác thư mục này) Sau đó cài OpenCVDotNet như bình thường, nó sẽ tìm trong thư mục trên bộ OpenCV gốc, do đó nếu các bạn ko cài hoặc cài vào thư mục khác nó báo lỗi ráng chịu (cái này nó ko tự detect đường dẫn dc, chuối thê ko bit) Sau khi cài xong xuôi, mở VS2005 ra, tạo một project mới. Vào Project>Add Reference, add thêm 2 file này trong thư mục cài OpenCVDotNet vào: OpenCVDotnet.dll và OpenCVDotnet.UI.dll Thêm dòng sau vào đầu đoạn code (thường nằm trong form1.cs - mình dùng c#) Code:
using OpenCVDotNet; Trong thư viện này, đã định nghĩa sẵn cho chúng ta 1 component, tương tự như picturebox, nhưng nhiều chức năng hơn, rất thuận tiện cho các ứng dụng xử lý ảnh: SelectPictureBox, tốt nhất nếu dùng OpenCVDotNet thì nên dùng luôn component này để lưu trữ, hiển thị ảnh luôn, component này chúng ta lôi ra từ file OpenCVDotnet.UI.dll :P Đầu tiên, để capture ảnh từ 1 camera và hiển thị nó lên: Code:
CVCapture capture = new CVCapture(); //ko nhất thiết phải khởi tạo = new CVCapture() Dùng đối tượng CVImage để lưu trữ hình ảnh, nên dùng cái này là tốt nhất, nó cũng rất dễ chuyển sang định dạng bitmap để dùng cho nhiều mục đích khác, nhưng các hàm xử lý ảnh của thư viện này thì chỉ dùng CVImage làm tham số Code:
private CVImage image = null; //chưa có gì, nên cho nó = null Để hiển thị hình ảnh thu dc từ webcam, có thể đặt đoạn code sau vào 1 timer, đặt interval là (1 / 24)*1000 ms (24 hình trên 1s ấy mà ) Code:
image = capture.QueryFrame(); if (image == null) capture.Restart(); selectPictureBox1.Image = image.ToBitmap(); Sau khi nắm dc vài component của thư viện này, phần còn lại là phải tìm hiểu về xử lý ảnh, chính xác là muốn xử lý cái gì, dùng thuật toán nào (cái này có thể ko cần tìm hiểu sâu, chỉ cần biết sơ sơ trình tự của từng cái là đủ để áp dụng các hàm có sẵn trong thư viện, chỉ cần sửa đôi chút trong hàm Track() trong source của mình (mình cũng chỉ sửa đôi chút từ cái source meanshift họ cung cấp mẫu thôi :"> ), để làm 1 ứng dụng nhỏ, đơn giản thì đoạn code trong hàm track() đó là đủ. Trong ct của mình, trình tự sẽ là: -Dùng chuột vẽ một hình chữ nhật bao quanh đối tượng di chuyển, thực chất là thay đổi vị trí và kích thước của SelectedRect trong component SelectPictureBox (chỉ cần giữ chuột và kéo, thả ra là nó tự thay đổi theo chúng ta chọn). -Lưu biểu đồ màu của vùng dc chọn (bằng hàm UpdateHistogram) -Sau một thời gian, áp dụng giải thuật detect = meanshift Code:
using (CVImage bp = image.CalcBackProject(this.initialHistogram)) { // calculate mean shift with user parameters and region of interest. CVConnectedComp conn = bp.MeanShift(selectPictureBox1.SelectionRect, Iterations); Code:
selectPictureBox1.SelectionRect = conn.Rect; -Lặp lại các bước trên. Thân P/s: giờ mình mới xem lại cái thư mục project đó, quá nhiều file ko cần thiết, một số mình viết khi định dùng directX, nhưng ko ăn nhập gì vào chương trình cả, cứ remove nó thẳng tay đi |
|
|