Ung dung xu ly anh trong thuc te voi thu vien OpenCV

103 14 0
Ung dung xu ly anh trong thuc te voi thu vien OpenCV

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Xử lý ảnh và thị giác máy là lĩnh vực mà ngày nay được phát triển và ứng dụng rất rộng rãi trong nhiều lĩnh vực khác nhau nhờ vào sự phát triển ngày càng mạnh mẽ của các hệ thống máy tính, các thuật toán và công trình nghiên cứu khác nhau của nhiều nhà khoa học trên thế giới. Ở Việt Nam, các ứng dụng về xử ảnh đã bư ớc đầu được triển khai trên một số lĩnh vực như lắp đặt hệ thống nhận dạng biển biển số xe ở các bãi đổ xe, hệ thống nhận dạng vân tay chấm công ở các công sở … môn học xử lý ảnh ở các trường đại học được xem là môn học bắt buộc ở một số ngành như công nghệ thông tin, điện tử viễn thông …Tuy nhiên nhìn một cách khách quan thì số lượng các ứng dụng được triển khai trên thực tế là quá ít ỏi, lĩnh vực này sẽ còn phát triển mạnh mẽ trong tương lai nếu như được quan tâm một cách nghiêm túc. Xuất phát từ thực tế rằng môn học xử lý ảnh ở các trường đại học là một môn học mang nặng tính học thuật, khô khan, các vấn đề được mô tả dưới dạng toán học, sinh viên nắm bắt môn học một cách chung chung mà không đi vào bản chất vấn đề, ứng dụng thực tiễn của môn học, thêm vào đó số lượng tài liệu về chuyên ngành này bằng tiếng Việt là không nhiều, bằng quá trình nghiên cứu nghiêm túc, kinh nghiệm thực tế tác giả đã cố gắng cho ra đời cuốn sách Ứng dụng xử lý ảnh trong thưc tế với thư viện OpenCV

nV ăn Lo ng Ứng dụng xử lý ảnh thực tế với thư viện OpenCV Ứng dụng xử lý ảnh thực với thư viện OpenCV C/C++ Nguyễn Văn Long Ng uy ễ long.06clc@gmail.com Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng Mở đầu Ng uy ễ nV ăn Lo Xử lý ảnh thị giác máy lĩnh v ực mà ngày phát triển ứng dụng rộng rãi nhiều lĩnh vực khác nhờ vào phát triển ngày mạnh mẽ hệ thống máy tính, thuật tốn cơng trình nghiên cứu khác nhiều nhà khoa học giới Ở Việt Nam, ứng dụng xử ảnh bư ớc đầu triển khai số lĩnh vực lắp đặt hệ thống nhận dạng biển biển số xe bãi đổ xe, hệ thống nhận dạng vân tay chấm công công sở … môn học xử lý ảnh trường đại học xem môn học bắt buộc số ngành công nghệ thông tin, điện tử viễn thông …Tuy nhiên nhìn cách khách quan số lượng ứng dụng triển khai thực tế ỏi, lĩnh vực phát triển mạnh mẽ tương lai quan tâm cách nghiêm túc Xuất phát từ thực tế môn học xử lý ảnh trường đại học mơn học mang nặng tính học thuật, khơ khan, vấn đề mơ tả dạng tốn học, sinh viên nắm bắt môn học cách chung chung mà không vào chất vấn đề, ứng dụng thực tiễn mơn học, thêm vào số lượng tài liệu chuyên ngành tiếng Việt không nhiều, trình nghiên cứu nghiêm túc, kinh nghiệm thực tế tác giả cố gắng cho đời sách Ứng dụng xử lý ảnh thưc tế với thư viện OpenCV Cuốn đề cập tới số phần lĩnh vực xử lý ảnh thị giác máy, thông qua diễn giải trực quan, không xa vào cơng thức tốn học trừu tượng, phức tạp làm bật nên vấn đề, giúp người đọc có nhìn tổng qt, hiểu khái niệm biết vấn đề ứng dụng vào thực tế Các chủ đề cuôn sách kèm với chương trình mơ ph ỏng viết ngơn ngữ C++ với giúp đỡ thư viện OpenCV, thư viện mã nguông mở đánh giá mạnh mẽ tốc độ xử lý đáp ứng ứng dụng thời gian thực Cuốn sách chia thành bốn phần, phần đầu giới thiệu thư viện OpenCV, phần thứ hai nói số vấn đề chọn lọc thường gặp xử lý ảnh không gian màu, lọc, cách phát đường thẳng đường trịn ảnh …, phần thứ ba nói số thủ thuật để lập trình với thư viện MFC phần cuối nói số ứng dụng thực tế toán nhận dạng biển số xe … Cuốn sách không tài liệu tham khảo bổ ích q trình học tập bạn sinh viên, trình làm luận văn, đồ án … mà cịn cơng cụ tốt hỗ trợ cho việc triển khai ứng dụng thương mại kĩ sư, doanh nghi ệp người quan tâm tới lĩnh v ực Cuối dù dành nhiều tâm huyết để hoàn thành sách chắn sách cịn nhiều sai xót, tác giả mong góp ý bạn đọc Xin gửi lời chúc tốt tốt đẹp lời cảm ơn sâu sắc tới độc giả Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng Hướng dẫn sử dụng sách Cuốn sách viết dựa nghiên cứu trình làm việc thực tế tác giả, với vấn đề nêu sách bạn đọc đọc qua để nắm bắt ý tưởng chính, sau tìm thêm tài liệu để nâng cao vấn đề thực hành dựa vào mẫu chương trình, source code kèm Lo Thư viện OpenCV viết sách OpenCV 2.4.3, OpenCV khác bạn đọc tùy chỉnh lại chút nhiên chất vấn đề tương đối giống Ngôn ngữ lập trình cho ví dụ C/C++, IDE sử dụng Visual Studio 2010 Tuy nhiên đa số chương trình sách tách biệt phần xử lý vào file *.cpp nên ta lấy để áp dụng vào trình dịch khác nV ăn Có 10 chủ đề bao quát số khía cạnh lĩnh vực xử lý ảnh viết chi tiết giải thích đầy đủ, project tác giả mơ tả chung chung Do bạn đọc chưa thực quen với thư viện OpenCV nên đọc theo thứ tự từ đầu tới cuối Ng uy ễ Trong sách có nhiều vấn đề liên quan tới kĩ thuật lập trình phạm vi giới hạn, tác giả nói qua số khía cạnh, thực tế có nhiều cách khác để giải công việc, với vấn đề lập trình bạn đọc chưa rõ tham khảo thêm tài nguồn khác giải theo hướng mà bạn đọc cảm thấy thỏa đáng Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng Mục Lục Giới thiệu thư viện OpenCV Phiên OpenCV hay OpenCV Hướng dẫn sử dụng OpenCV Window Chương II Các phép xử lý đơn giản OpenCV Lo Chương I Làm quen với thư viện OpenCV nV ăn Chương trình đ ầu tiên Khơng gian màu, chuyển đổi không gian màu Điều chỉnh độ sang, độ tương phản Ảnh nhị phân, nhị phân hóa với ngưỡng động Histogram, cân histogram Phóng to, thu nhỏ, xoay ảnh Lọc số ảnh Các phép tốn hình thái học ảnh Tìm biên ảnh với lọc Canny 10 Chuyển đổi Hough, Phát đường thẳng, đường tròn ảnh 5 12 13 17 19 23 27 30 37 43 46 Chương III Lập trình xử lý ảnh với giao diện MFC Giới thiệu MFC Khởi tạo project MFC Làm việc với điều khiển (Control) Chuyển đổi kiểu liệu MFC Chương trình tải ảnh hiển thị ảnh lên giao diện MFC uy ễ 51 51 54 59 61 Chương IV Một số ứng dụng thực tế Ng My Photo Editor, phần mềm chỉnh sửa ảnh đơn giản Nhận dạng biển số xe MyCam, số hiệu ứng ảnh video Tác giả: Nguyễn Văn Long – long.06clc@gmail.com 64 73 90 Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV Chương I Làm quen với thư viện OpenCV ng Giới thiệu thư viện OpenCV Lo OpenCV (Open Source Computer Vision) thư viện mã nguồn mở thị giác máy với 500 hàm 2500 thuật toán đư ợc tối ưu xử lý ảnh, vấn đề liên quan tới thị giác máy OpenCV thiết kế cách tối ưu, sử dụng tối đa sức mạnh dòng chip đa lõi… đ ể thực phép tính tốn thời gian thực, nghĩa tốc độ đáp ứng đủ nhanh cho ứng dụng thơng thường OpenCV thư viện thiết kế để chạy nhiều tảng khác (cross-patform), nghĩa chạy hệ điều hành Window, Linux, Mac, iOS … Việc sử dụng thư viện OpenCV tuân theo quy định sử dụng phần mềm mã nguồn mở BSD bạn sử dụng thư viện cách miễn phí cho mục đích phi thương mại lẫn thương mại nV ăn Dự án OpenCV khởi động từ năm 1999, đến năm 2000 giới thiệu hội nghị IEEE vấn đề thị giác máy nhận dạng, nhiên OpenCV 1.0 tới tận năm 2006 thức cơng bố năm 2008 1.1 (pre-release) đời Tháng 10 năm 2009, OpenCV hệ thứ hai đời (thường gọi phiên 2.x), phiên có giao diện C++ (khác với phiên trước có giao diện C) có nhiều điểm khác biệt so với phiện thứ Thư viện OpenCV ban đầu hỗ trợ từ Intel, sau hỗ trợ bở Willow Garage, phịng thí nghiệm chuyên nghiên cứu công nghệ robot Cho đến nay, OpenCV thư viện mở, phát triển nguồn quỹ không lợi nhuận (none -profit foundation) hưởng ứng lớn cộng đồng Phiên OpenCV hay OpenCV 2? uy ễ Cho tới nay, trải qua năm từ lúc phiên OpenCV cơng bố, có nhiều phiên OpenCV đời, nhiên chia thư viện thành hai dựa đặc điểm khác biệt lớn chúng: phiên OpenCV hệ thứ (hay gọi phiên OpenCV 1.x) phiên OpenCV thứ hai (hay gọi phiên OpenCV 2.x) Sau ta số điểm khác biệt hai phiên OpenCV 1.x (bao gồm 1.0 pre-release 1.1) dựa giao diện C, cấu trúc ảnh số dựa cấu trúc IplImage, thư OpenCV 2.x dựa giao diện C++, cấu trúc ảnh số, ma trận dựa cấu trúc cv::Mat Trong OpenCV 1.x, người sử dụng phải hoàn toàn quản lý nhớ đối tượng, nghĩa m ột đối tượng tạo ra, ta phải ý để giải phóng khơng cịn sử dụng (trong nhiều trường hợp bị tràn nhớ không ý này), thư viện OpenCV 2.x việc quản lý nhớ trở nên dễ dàng nhờ hàm hủy các lớp đối tượng OpenCV 2.x thực điều đối tượng khơng cịn sử dụng Ng - - Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Việc viết dòng lệnh để thực chức OpenCV 2.x dễ dàng nhiều so với OpenCV 1.x, phần là giao diện C++ có phần dễ hiểu so với C, phần hàm OpenCV 2.x tối ưu hóa nhiều bước trung gian khơng cần thiết mặt giao diện người sử dụng Chẳng hạn ta xét ví dụ việc phát đường trịn ảnh mầu dựa vào thuật tốn Hough, bước để thực load ảnh mầu, chuyển sang ảnh nhị phân, tìm biên dựa lọc canny phát đường trịn dựa thuật tốn Hough OpenCV 1.x thực sau: Lo ng - Ứng dụng xử lý ảnh thực tế với thư viện OpenCV nV ăn // Phát đường tròn ảnh OpenCV 1.x IplImage* src = cvLoadImage(“image.jpg”); IplImage* gray = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); cvCvtColor(src, gray, CV_BGR2GRAY); cvCanny(gray, gray, 10, 30, 3); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, 50, 100, 50); Trong đó, OpenCV 2.x thực sau: // Phát đường tròn ảnh OpenCV 1.x Mat src = imread(“image.jpg”); Mat gray; CvtColor(src, gray, CV_BGR2GRAY); Canny(gray, gray, 10, 30, 3); Vector circles; HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, 50, 100, 50); uy ễ Ta thấy đối tượng ảnh gray OpenCV 2.x không cần phải khởi tạo, đối tượng storage (đối tượng trung gian, khơng có ý nghĩa v ề mặt sử dụng) khơng cần phải khởi tạo (và khơng cần giải phóng) - Thư viện OpenCV 1.x chứa lượng lớn hàm xử lý thuật toán, nhiên dạng sơ khai Thư viện OpenCV 2.x đư ợc bổ xung nhiều hàm, thuật toán tối ưu nhiều đặc biệt khía cạnh phát đối tượng (detection), nhận dạng đối tượng (partten regconition) theo dỗi đối tượng (tracking) Hơn nữa, có giao diện C++ OpenCV 2.x phần giao diện C để tương thích với phiên OpenCV 1.x … Ng Từ số đặc điểm ta thấy thư viện OpenCV phiên 2.x có nhiều điểm trội so với phiên 1.x, Tuy nhiên số trường hợp hệ thống nhúng mà trình dịch đơn chấp nhận ngơn ngữ C phiển 1.x giá trị Trong sách này, nội dung cài đặt, thuật toán, ứng dụng … dành cho OpenCV phiên 2.x tảng hệ điều hành Window Hướng dẫn sử dụng thư viện OpenCV Window Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV Trên Microsoft Visual Studio Lo ng Trước hết ta cần download thư viện OpenCV máy tính, tốt download địa http://sourceforge.net/projects/opencvlibrary/ Chọn build sẵn phù hợp với hệ điều hành dùng, OpenCV sử dụng sách 2.4.3 với lần update cuối vào ngày 25 tháng 12 năm 2012 Sau download máy, tiến hành cài đặt bình thường, ta để mặc định thư mục cài đặt C:\ thư mục cài đặt xong có dạng C:\opencv Tiếp theo ta tiến hành tùy chỉnh để làm việc với OpenCV qua hai IDE thông dụng Microsoft Visual Studio Eclipse CDT uy ễ nV ăn Phiên Visual studio sử dụng phiên Visual Studio 2010, phiên trước ta hồn tồn cấu hình cách tương tự Tạo project mới: New > Project, cửa sổ New Project chọn Visual C++, Win32 console application Đặt tên project opencv Ng Chọn OK, sau nhấn Next, hộp thoại xuất hiện, hộp thoại ta chọn Application type Console application Additional option Empty project, nhấn Finish để kết thúc trình khởi tạo Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page nV ăn Lo ng Ứng dụng xử lý ảnh thực tế với thư viện OpenCV uy ễ Project tạo project hoàn toàn trống, ta phải thêm vào file nguồn để chương trình có th ể chạy được, Solution Explorer ta click chuột phải vào Source Files, chọn Add -> New Item… Hộp thoại Add New Item ra, ta chọn kiểu cần thêm vào C++ File(.cpp) đồng thời ô Name ta đặt tên cho file thêm vào, giả sử FirstApp.cpp Bây giở file ta thêm vào #include gọi hàm main() để chạy chương trình Để chương trình chạy với thư viện OpenCV ta cần tùy chỉnh lại sơ thuộc tính project sau Ng Vào Project -> Properties (hoặc nhấn tổ hợp phím Alt + F7) để mở hộp thoại Properties Hộp thoại opencv Property Pages ra, mục Configuration Properties chọn VC++ Directories, tương ứng bên phải, ta tìm mục Include Directories Library Directories Ta đường dẫn hai thư mục đến phần tương ứng thư viện OpenCV Mục Include Directories, ta tùy chỉnh ô bên phải tới C:\opencv\build\include Mục Library Directories trỏ đến thư mục C:\opencv\build\x86\vc10\lib ta sử dụng hệ điều hành 32bit C:\opencv\build\x64\vc10\lib cho hệ điều hành 64bit Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng Tiếp theo, hộp thoại opencv Property Pages -> Configuration Properties -> Linker chọn Input, tương ứng ô bên phải, thêm vào giá trị cho mục Additional Dependencies opencv_core243d.lib, opencv_imgproc243d.lib, opencv_highgui243d.lib nV ăn Lo Chú ý lib thêm vào tương ứng với header ta khai báo chương trình, tùy thuộc vào mục đích sử dụng mà ta thêm vào lib nhau, giả sử ta cần sử dụng tới hàm video, ta thêm header #include phần Additional Dependencies ta phải khai báo thêm opencv_video243d.lib Chữ d đứng cuối file thể ta hoạt động chế độ debug, ta thêm lib khơng có chữ “d” cuối opencv_core243.lib … chế độ release Tuy nhiên h ọc tập cần nhiều chỉnh sửa ta nên để chế độ debug Cuối cùng, dịch xong chương trình, để chạy ta cần ý tới file *.dll Cách đơn giản ta copy file *.dll tương ứng (như opencv_core243d.dll, opencv_imgproc243d.dll) vào thư mục chứa file chạy chương trình (file *.exe) Các file *.dll nằm mục C:\opencv\build\x86\bin với win 32 bit C:\opencv\build\x64\bin với win 64 bit Với phiên OpenCV cũ hơn, ta cần copy file tbb_debug.dll (trong chế độ debug) tbb.dll (trong chế độ release) vào thư mục chứa file *.exe tbb.dll (Thread building block) file quan trọng, thiếu chương trình báo lỗi uy ễ Sau hoàn tất việc dẫn thư mục chứa header, library link tới library tương ứng, ta include header opencv vào chương trình gọi hàm làm việc OpenCV #include #include #include #include Ng using namespace std; using namespace cv; void main() { } Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page Ứng dụng xử lý ảnh thực tế với thư viện OpenCV Với Eclipse CDT Ng uy ễ nV ăn Lo ng Khởi động Eclipse, Từ cửa sổ Eclipse chọn New -> C++ Project , hộp thoại C++ Project xuất hiện, hộp thoại ta chọn Project name opencv, Project type Hello World C++ Project (Có thể chọn Empty Project), Toolchains MinGW GCC, Chọn Finish ta có Project Bây tùy chỉnh cho project hoạt động với OpenCV Trong cửa sổ Eclipse chọn Project >Properties, cửa sổ Properties Tron cửa sổ Properties chọn C/C++ Build->Settings Trong tab Tool Settings Ở phần GCC C++ Compiller chọn Include dẫn đường dẫn tới mục Include OpenCV C:\opencv\build\include Trong phần MinGW C++ Linker chọn Library chọn mục sau: click vào dấu cộng Library search path (-L) dẫn tới thư mục lib: C:\opencv\build\x86\mingw\lib Windows 32 bit C:\opencv\build\x64\mingw\lib Windows 64 bit Tiếp click vào dấu "cộng" để thêm Library(-I) vào, library cần thêm là: opencv_core243, opencv_highgui243, opencv_imgproc243 nói chung tùy vào nhu cầu sử dụng thêm nhiều lib vào Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page 10 Ứng dụng xử lý ảnh thực tế với thư viện OpenCV Ng uy ễ nV ăn Lo ng Bài toán nhận dạng biển số xe xây dựng mơ hình chung tổng quát, để ứng dụng thưc tế ta cần giới hạn bớt lại số điều kiện giúp cho việc tìm kiếm biển số xác hơn, thêm vào mẫu huấn luyện kí tự cần phải sưu tập nhiều hơn, vector đặc trưng phải tính tốn tỉ mỉ để giúp cho kết nhận dạng có độ xác cao Ngồi ra, cịn nhiều khía cạnh khác liên quanh đến toán ứng dụng thực tế cần phải xây dựng hệ sở liệu để lưu trữ kết quả, so sánh kết quả, xây dựng hệ thống phần cứng, điều khiển phần cứng để điều khiển hệ thống hệ thống thẻ từ RFID, hệ camera, hệ động cho điều khiển học … Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page 89 Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng MyCam, số hiệu ứng ảnh với video Lo Trong phần này, ta tạo chương trình thu nhận ảnh từ webcam hàm xử lý ảnh đơn giản ví dụ để tạo hiệu ứng video đẹp mắt, chương trình có số chức như: thu nhận video từ webcam, chức xử lý video dựa hàm xử lý ảnh (làm mờ, làm méo, chuyển đổi không gian màu …) chức chụp hình, ghi hình, điều chỉnh số thông số … Nhưng trước hết tìm hiểu cấu trúc video, cách xử lý video hỗ trợ thư viện OpenCV để làm việc với video nV ăn Cấu trúc file video Ta thường xem clip ca nhạc, phim máy tính, Youtube … Chúng gọi chung video Một file video có nhiều định dạng khác avi, mp4, mov …, xét cầu trúc, file video tạo nên từ nhiều thành phần khác gọi track, chẳng hạn track video, track audio, track phụ đề … uy ễ Track Video Ta cần phải phân biệt định dạng file video (file extention) giải mã video (video codec) Định Track Audio dạng file, chẳng hạn avi, mp4, mov, flv … cách cấu trúc file máy tính, cách Track Phụ đề lưu trữ liệu ổ đĩa th ế nào, phần tử xắp xếp … giải mã (video Track thời gian codec) video mã hóa nào, có nén hay khơng cách để đọc liệu video … … Các giải mã mà ta thường thấy H.264, XVID, MPEG, UYVY … Cùng định dạng file có nhiều codec khác nhau, chẳng hạn file *.avi mã hóa giải mã codec XVID, UYVY …, điều lý giải số máy tính đọc file avi số máy tính khác lại khơng đọc file avi đó, nguyên nhân máy chưa cài codec mà file avi chứa mã mã hóa/giải mã Tương tự, audio có codec riêng ACC, MP3 … máy thiếu video codec mà có audio codec số trường hợp, file video chạy phần âm mà khơng hiển thị hình ảnh Ng Xử lý video Xử lý video khái niệm chung, theo cấu trúc video, nói đến xử lý video có nghĩa ta x lý tất track file video bao gồm track video, track audio … nhiên khuôn khổ việc áp dụng xử lý ảnh thực tế, ta làm việc với track video mà khơng làm việc với track cịn lại file video Xét cách tổng quát, ta xem track video (hay video stream) chuỗi ảnh lien tiếp gọi frame, cách hiển thị frame quy định thơng số tốc độ frame (frame rate), số frame xuất giây có đơn vị tính frame/giây (frame per second hay fps) Việc xư lý video thành lại việc xử lý frame ảnh Tuy nhiên cần phải ý phép xử lý ảnh tĩnh khơng có nhu cầu khắc khe thời gian, nhiên với video mà giây ta phải xử lý tới hang chục ảnh (các video thơng thường có tốc độ 15-30 hình/giây Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page 90 Ứng dụng xử lý ảnh thực tế với thư viện OpenCV ng nữa) ta cần phải tối ưu hóa phép xử lý tới mức để video chạy thời gian thực (khơng bị giật cục, tắc hình) Ng uy ễ nV ăn Lo Thư viện OpenCV xử lý video Thư viện OpenCV hỗ trợ ta hàm để bắt ảnh từ thiết bị webcam, camera …, ghi frame ảnh thành file video, việc làm xử lý video ta sử dụng hàm xử lý ảnh mà thư viện cung cấp để xử lý frame video Tuy nhiên, thư viện OpenCV thư viện chuyên xử lý ảnh, nên hỗ trợ track video cấu trúc file video nói trên, nghĩa thu video, ghi video ta có phẩn hình (video stream) mà nghe phần tiếng Một hạn chế ban đầu OpenCV hỗ trợ để làm việc video avi khơng nén, điều làm cho việc kích thước việc lưu trữ file tăng lên nhiều, giả sử ta cần ghi đoạn video avi không nén thời gian phút với tốc độ 25 hình/giây ảnh thu từ webcam có kích thức 640x480 (ảnh màu, kênh màu pixel bit) kích thước file cần phải có 1*60*25*640*480*3*8 = 11059200000 bit tức khoảng 1Gb Tuy nhiên, ta làm việc nhiều dạng file avi nén, file mpeg, flv … miễn máy có cài codec tương ứng Để đọc video từ file video thiết bị webcam, camera … thư viện OpenCV cung cấp cho ta lớp cv::VideoCapture Ví dụ ta đọc từ file video, ta khởi tạo đối tượng VideoCaputre sau: cv::VideoCapture capture = cv::VideoCapture(“D:/test.avi”); Để đọc video từ thiết bị: cv::VideoCapture capture = cv::VideoCapture(int device) Trong đó, device số nguyên thiết bị video máy, thông thường ta để device để thiết bị sử dụng webcam mặc định máy tính laptop, khơng biết cụ thể thiết bị gì, ta viết chương trình nhỏ để kiểm tra thiết bị phù hợp cách tằn biến device từ tới số (100 chẳng hạn), với giá trị device, kiểm tra xem capture có tạo hay không, thiết bị phù hợp, capture trả giá trị khác null, ngược lại null: for(int device = 0; device < 100; ++device) { cv::VideoCapture capture = cv::VideoCapture(int device) if(capture) cout> src; switch(type) { case RGB : dst = src; break; case GRAY : mycam.Gray(src, dst); break; case INVERT: mycam.Invert(src, dst); break; case HSV : mycam.ToHSV(src, dst); break; case : break; Ng default: dst = src; break; } } } cv::imshow("Video", dst); if(is_captured && writer.isOpened()) writer && size.width > 0) } Ng else { writer = cv::VideoWriter(video_file_name, CV_FOURCC('X','V', 'I', 'D'),8, size, true); btn_capture.SetBitmap((HBITMAP)(LoadImageA(0," /MyCam/res/ stop.bmp",0, 0, 0, LR_LOADFROMFILE))); btn_snapshot.EnableWindow(false); btn_setting.EnableWindow(false); btn_folder.EnableWindow(false); btn_capture.SetBitmap((HBITMAP)(LoadImageA(0," /MyCam/res/ capture.bmp",0, 0, 0, LR_LOADFROMFILE))); btn_snapshot.EnableWindow(true); btn_setting.EnableWindow(true); btn_folder.EnableWindow(true); Tác giả: Nguyễn Văn Long – long.06clc@gmail.com Page 100 Ứng dụng xử lý ảnh thực tế với thư viện OpenCV } ng if(writer.isOpened()) writer.release(); } Lo Khi button Capture nhấn, đối tượng writer tạo với tên file video tạo từ hàm CreateFileName(), định dạng ta sử dụng avi với codec XVID, đồng thời trạng thái chương trình chuy ển sang trạng thái ghi hình, nghĩa button Capture bây gi thay ảnh có tên Stop, button khác Snapshot, Open Folder, Setting bị vơ hiệu hóa Nếu button click lần thứ hai (khi trình ghi hình diễn ra) ta ngừng việc ghi video lại, hủy đối tượng writer trạng thái chương trình trở ban đầu nV ăn 18 Hàm click vào button Open Folder (mở folder chứa file ảnh file video): void CMyCamDlg::OnBnClickedFolder() { std::string str_command = "explorer.exe " + output_folder; const char *command = str_command.c_str(); system(command); } Hàm mở folder chứa chứa ảnh chụp video ghi lại hàm sytem(command), command chuỗi kiểu char để gọi hàm explorer.exe với đối số đường dẫn tới folder cần mở uy ễ 19 Hàm click button Setting: void CMyCamDlg::OnBnClickedSetting() { Setting setting; is_stoped = true; setting.DoModal(); fps = setting.Fps; output_folder = setting.OutputPath; if(fps

Ngày đăng: 28/05/2021, 23:56

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan