Marina Regatta 2012 4 th – 6 th May 2012 Water Layout (detailed)
2012 Ntviet Th Xla 1
-
Upload
dat-nguyen -
Category
Documents
-
view
47 -
download
6
Transcript of 2012 Ntviet Th Xla 1
OPENCV and C/C++
Nguyễn Trọng Việ[email protected]
1Tp. Hồ Chí Minh, tháng 09/2011
Trường Đại học Khoa học Tự nhiênKhoa Công nghệ Thông tin
Mục tiêu buổi học
Sau buổi học, sinh viên có thể:• Trình bày cách tổ chức thư viện.
• Thiết lập để lập trình với VC++.
• Liệt kê các cấu trúc dữ liệu quan trọng.
• Liệt kê các hàm quan trọng.
• Thao tác trên các trường dữ liệu quan trọng.
• Viết chương trình cơ bản dùng OpenCV và VC++.
• Liệt kê các bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 2
The seminar objecttives
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 3
The presentation outline
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 4
The presentation outline
Giới thiệu thư viện lập trình OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 5
OpenCV: a programming library
• Là thư viện mã nguồn mở (open source)
Do Intel đề xuất.
Hiện do Willow Garage điều hành.
Được sự đóng góp của nhiều lab trên thế giới.
• Có thể làm việc trên: Linux, Mac OS, Windows, Android.
• Hổ trợ nhiều ngôn ngữ: C/C++, Python, Matlab (hạn chế).
• Cài đặt dưới dạng hàm hoặc lớp đối tượng C++.
Giới thiệu thư viện lập trình OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 6
OpenCV: a programming library
• Phiên bản được dùng: 2.2.0 Cài đặt hơn 500 hàm xử lý ảnh và thị giác máy tính.
Hổ trợ chạy song song:
− Trên CPU với OpenMP 2.0
− Trên GPU với Nvidia CUDA.
Hổ trợ nhiều định dạng video khác nhau.
Hổ trợ nhận dữ liệu từ cameras.
Hổ trợ Android.
• Download tại: http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/OpenCV-2.2.0-win32-vs2010.exe/download
Giới thiệu thư viện lập trình OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 7
OpenCV: a programming library
• Phiên bản 2.2.0 hổ trợ các hàm (phương thức lớp) thực hiện:
Các phép toán đại số cơ bản.
Các thao tác cơ bản trên ma trận: cộng, nhân, chuyển vị, nghịch đảo, …
Các thao tác xử lý ảnh: lọc, tìm biên cạnh, phân tích hình thái, histogram, …
Các phép phân tích cấu trúc: thành phần liên thông, contour, Hough, ...
Phân tích chuyển động và theo vết: optical flow, phân đoạn chuyển động, ...
Máy học: SVM, cây quyết định, boosting, mạng neural, ...
Rút trích đặc trưng: SURF, HOG, …
Giao diện đồ họa người dùng: cửa sổ, chuột, bàn phím, ...
Đồ họa cơ bản: đường thẳng, conic, văn bản, …
Giới thiệu thư viện lập trình OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 8
OpenCV: a programming library
• Thư viện được viết bằng C/C++.
• Biên dịch ra thư viện liên kết động (Dynamic Linked Library – dll) gồm các file:
File .h hay .hpp.
File .lib.
File .dll.
Thiết lậpthế nào ?
Thiết lập tĩnh
Thiết lập động
Khi đem sang máy khác, đòi hỏimáy đó phải có cài OpenCV mớibiên dịch chương trình lại được
Vô tư.
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 9
The presentation outline
Tổ chức thư viện OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 10
Library organization
OpenCV 2.2
Include/opencv2
lib
highgui
opencv_highgui220.lib
bin
highgui_c.h
opencv_highgui220.dll
- Cửa sổ, trackbar, font, text, button, mouse.
- Mở/lưu ảnh, hiển thị ảnh, giải phóngdữ liệu ảnh.
- Mở/ghi video files.
- Cameras.
- Lấy video frames.
…
core
core_c.h
opencv_core220.lib
opencv_core220.dll
- Cấu trúc dữ liệu ảnh, ma trận.
- Hàm tạo, clone, copy, … ma trận/ ảnh.
- Các hàm số học, logic.
- Hàm toán học, ma trận.
- Cấu trúc dữ liệu động.
- Đồ thị, cây.
- Quản lý lỗi.
…
Giao diện người dùng Hàm cơ sở
Tổ chức thư viện OpenCV
Tp. Hồ Chí Minh, tháng 09/2011 11
Library organization
ml
ml.hpp
opencv_ml220.lib
opencv_ml220.dll
- Bộ phân lớp Bayes.
- K người láng giếng gần nhất.
- Support Vector Machine
- Expectation Maximum.
- Cây quyết định.
- Cây ngẫu nhiên.
- Mạng neural.
…
Máy học
imgproc
imgproc_c.h
opencv_imgproc220.lib
opencv_imgproc220.dll
- Lọc, làm trơn ảnh.
- Chuyển hệ màu.
- Biến đổi Affine trên ảnh.
- Hình thái học.
- Histogram.
- Rút đặc trưng cạnh, góc.
- Phép biến đổi Hough.
…
Xử lý ảnh
OpenCV 2.2
Include/opencv2
lib
bin
Tp. Hồ Chí Minh, tháng 09/2011 12
Library organization
highgui
opencv_highgui220.lib
highgui_c.h
opencv_highgui220.dll
- Cửa sổ, trackbar, font, text, button, mouse.
- Mở/lưu ảnh, hiển thị ảnh, giải phóngdữ liệu ảnh.
- Mở/ghi video files.
- Cameras.
- Lấy video frames.
…
core
core_c.h
opencv_core220.lib
opencv_core220.dll
- Cấu trúc dữ liệu ảnh, ma trận.
- Hàm tạo, clone, copy, … ma trận, ảnh.
- Các hàm số học, logic.
- Hàm toán học, ma trận.
- Cấu trúc dữ liệu động.
- Đồ thị, cây.
- Quản lý lỗi.
…
Giao diện người dùng Hàm cơ sở
Tổ chức thư viện OpenCV
OpenCV 2.2
Include/opencv2
lib
bin
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 13
The presentation outline
Quy tắc chung
• Tạo project.
• Biên dịch để được file .exe.
• Tạo thư mục OpenCv2 trong cùng folder chứa main entry củachương trình.
– Tạo thư mục con highgui và core.
– Tạo thư mục con lib.
• Chép tập tin:
– Các tập tin .h cần thiết vào highgui và core.
– Các tập tin .lib cần thiết vào thư mục lib.
• Chép các tập tin .dll cần thiết vào cùng folder với file .exe.
• Thiết lập VC++ để sử dụng hàm và cấu trúc của OpenCV.
Tp. Hồ Chí Minh, tháng 09/2011 14
VC++ settings
Thiết lập sử dụng trong ứng dụng console
• Tạo project Win32 console application.
• Biên dịch để được file .exe.
• Tạo thư mục OpenCv2 trong cùng folder chứa hàm main.
– Tạo thư mục con highgui và core.
– Tạo thư mục con lib.
• Chép tập tin:
– Các tập tin .h cần thiết vào highgui và core.
– Các tập tin .lib cần thiết vào thư mục lib.
• Chép các tập tin .dll cần thiết vào cùng folder với file .exe.
• Thiết lập VC++ để sử dụng hàm và cấu trúc của OpenCV.
Tp. Hồ Chí Minh, tháng 09/2011 15
VC++ settings
Tạo project• Tạo project: Lab1_Console.
• Dạng ứng dụng: Win32 console application.
Tp. Hồ Chí Minh, tháng 09/2011 16
VC++ settings
Tạo thư mục cần thiết• Biên dịch để được file .exe.
• Tạo thư mục opencv2 trong cùng thư mục chứa hàm main.
– Tạo thư mục con highgui và core.
– Tạo thư mục con lib.
Tp. Hồ Chí Minh, tháng 09/2011 17
VC++ settings
Chép tập tin thư viện• Chép tập tin:
– Các tập tin .h cần thiết vào thư mục highgui và core.
– Các tập tin .lib cần thiết vào thư mục lib.
• Chép các tập tin .dll cần thiết vào cùng folder với file .exe.
Tp. Hồ Chí Minh, tháng 09/2011 18
VC++ settings
Chép file thư viện
Tp. Hồ Chí Minh, tháng 09/2011 19
VC++ settings
OpenCV 2.2
Include/opencv2
Lab1_Console
opencv2
Lab1_Console
debug
highgui
core
lib
highgui
core
bin
lib
opencv_highgui220.dll
opencv_core220.dll
highgui_c.h
core_c.h
opencv_highgui220.lib
opencv_core220.lib
Thiết lập trong VC++• Project -> Lab1_Console properties …
Tp. Hồ Chí Minh, tháng 09/2011 20
VC++ settings
Thiết lập trong VC++• Configuration: All configurations
Tp. Hồ Chí Minh, tháng 09/2011 21
VC++ settings
Thiết lập trong VC++• Configuration Properties -> C/C++ -> General
Tp. Hồ Chí Minh, tháng 09/2011 22
VC++ settings
Thiết lập trong VC++• Configuration Properties -> C/C++ -> General
Tp. Hồ Chí Minh, tháng 09/2011 23
VC++ settings
Lab1_Console
opencv2
Lab1_Console
debug
highgui
core
Thiết lập trong VC++• Configuration Properties -> Linker -> General
Tp. Hồ Chí Minh, tháng 09/2011 24
VC++ settings
Lab1_Console
opencv2
Lab1_Console
debug
highgui
core
lib
Thiết lập trong VC++• Configuration Properties -> Linker -> Input
Tp. Hồ Chí Minh, tháng 09/2011 25
VC++ settings
Lab1_Console
Lab1_Console
debug
lib
opencv2
opencv_highgui220.lib
opencv_core220.lib
Chương trình đầu tiên
• Môi trường Visual Studio 2010, VC ++.
• Viết chương trình console load và hiển thịmột file ảnh cho trước ra màn hình.
Tp. Hồ Chí Minh, tháng 09/2011 26
VC++ settings
Những dòng code đầu tiên#include “highgui_c.h”
void main(){
IplImage* pImage = cvLoadImage(“Jellyfish.jpg" );
if ( pImage != NULL ){
cvNamedWindow( “My window" );cvShowImage( “My window", pImage );
cvWaitKey();
cvReleaseImage( &pImage );cvDestroyWindow( “My window" );
}}
Tp. Hồ Chí Minh, tháng 09/2011 27
VC++ settings
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 28
The presentation outline
Một số cấu trúc dữ liệu quan trọngtypedef struct _IplImage{
int nSize;int nChannels;int depth;char colorModel[4];char channelSeq[4];int origin;int width;int height;int imageSize;char *imageData;int widthStep;char *imageDataOrigin;struct _IplROI *roi;struct _IplImage *maskROI;…
}IplImage;
Tp. Hồ Chí Minh, tháng 09/2011 29
Data structures
Số kênh màu của ảnh:- 1: grayscale- 3: RGB- 4: RGBA
Thứ tự kênh màu của 1 pixel:- RGB.- BGR.
Kích thước ảnh theo pixel
Kích thước 1 dòng dữ liệu ảnh theo byte: width * nChannels
Dữ liệu ảnh đã giải nén
Số bit trên mỗi kênh màu:- IPL DEPTH 8U Unsigned 8-bit integer- IPL DEPTH 8S Signed 8-bit integer- …
Một số cấu trúc dữ liệu quan trọngtypedef struct CvPoint{
int x;int y;
}CvPoint;
/* Constructor */inline CvPoint cvPoint( int x, int y );
typedef struct CvPoint2D32f{
float x;float y;
}CvPoint2D32f;
/* Constructor */inline CvPoint2D32f cvPoint2D32f( double x, double y );
Tp. Hồ Chí Minh, tháng 09/2011 30
Data structures
typedef struct CvScalar{
double val[4];}CvScalar;
/* Constructor */inline CvScalar cvScalar( double val0,
double val1=0,double val2=0, double val3=0 );
inline CvScalar cvScalarAll( double val );
Một số cấu trúc dữ liệu quan trọngtypedef struct CvSize{
int width;int height;
}CvSize;
/* Constructor */inline CvSize cvSize( int width, int height );
Tp. Hồ Chí Minh, tháng 09/2011 31
Data structures
typedef struct CvRect{
int x;int y;int width;int height;
}CvRect;
/* Constructor */inline CvRect cvRect( int x, int y,
int width, int height );
Một số cấu trúc dữ liệu quan trọng, thường gặp khác: CvMat CvMatND CvArr
Tra cứu thêm trong OpenCV Reference Manual
Một số hàm liên quan ảnhLoad ảnh:
IplImage* cvLoadImage( const char* filename, int iscolor=CV LOAD IMAGE COLOR );
Lưu ảnh:
int cvSaveImage( const char* filename, const CvArr* image );
Giải phóng dữ liệu ảnh:
void cvReleaseImage(IplImage** image);
Tạo ảnh mới:
IplImage* cvCreateImage(CvSize size, int depth, int channels);
Lấy kích thước ảnh:
CvSize cvGetSize(const CvArr* arr);
Tp. Hồ Chí Minh, tháng 09/2011 32
Functions
Một số hàm liên quan cửa sổ
int cvNamedWindow( const char* name, int flags );
void cvMoveWindow( const char* name, int x, int y );
void cvDestroyWindow( const char* name );
void cvDestroyAllWindows(void);
void cvShowImage( const char* name, const CvArr* image );
Tp. Hồ Chí Minh, tháng 09/2011 33
Functions
Một số hàm liên quan track bar
int cvCreateTrackbar( const char* trackbarName, const char* windowName,
int* value, int count, CvTrackbarCallback onChange );
Với onChange có dạng hàm int abc(int)
int cvGetTrackbarPos( const char* trackbarName, const char* windowName );
void cvSetTrackbarPos( const char* trackbarName, const char* windowName, int pos );
Tp. Hồ Chí Minh, tháng 09/2011 34
Functions
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 35
The presentation outline
Chuyển ảnh xám
Viết chương trình:
Nhận tên file ảnh từ tham số dòng lệnh.
Hiển thị ảnh gốc.
Chuyển ảnh gốc sang ảnh độ xám.
Hiển thị kết quả ảnh độ xám.
Tp. Hồ Chí Minh, tháng 09/2011 36
Exercise with OpenCV & VC++
Công thức chuyển màu:Gray = 0.299 * R + 0.587 * G + 0.114 * B
Chương trình có giao diện
• Môi trường Visual Studio 2010, VC ++.
• Viết chương trình giao diện đồ họa sử dụngMFC để browse đến 1 file ảnh, load và hiểnthị trên giao diện.
Tp. Hồ Chí Minh, tháng 09/2011 37
Exercise with OpenCV & VC++
Tạo project MFC Application• Tạo project mới (MFC – MFC Application).
Tp. Hồ Chí Minh, tháng 09/2011 38
Exercise with OpenCV & VC++
Thiết lập đặc tính ứng dụng
• Chọn dạng ứng dụng: Dialog based.
Tp. Hồ Chí Minh, tháng 09/2011 39
Exercise with OpenCV & VC++
Thiết lập đặc tính ứng dụng
• Chọn đặc tính người dùng: bỏ check ở About box -> Finish
Tp. Hồ Chí Minh, tháng 09/2011 40
Exercise with OpenCV & VC++
Thiết lập sử dụng trong ứng dụng MFC
• Biên dịch để được file .exe.
• Tạo thư mục OpenCv2 trong cùng folder chứa file …Dlg.cpp.
– Tạo thư mục con highgui và core.
– Tạo thư mục con lib.
• Chép tập tin:
– Các tập tin .h cần thiết vào highgui và core.
– Các tập tin .lib cần thiết vào thư mục lib.
• Chép các tập tin .dll cần thiết vào cùng folder với file .exe.
• Thiết lập VC++ để sử dụng hàm và cấu trúc của OpenCV.
Tp. Hồ Chí Minh, tháng 09/2011 41
Exercise with OpenCV & VC++
Thiết kế giao diện• Resource View -> … -> Dialog
Tp. Hồ Chí Minh, tháng 09/2011 42
Exercise with OpenCV & VC++
Thiết kế giao diện• Add các control cần thiết:
Static Text
Button
Tp. Hồ Chí Minh, tháng 09/2011 43
Exercise with OpenCV & VC++
Picture Control
Edit Control
Thiết kế giao diện
Tp. Hồ Chí Minh, tháng 09/2011 44
Exercise with OpenCV & VC++
ID: IDC_BUTTON_BROWSEID: IDC_EDIT_LOCATION
ID: IDC_STATIC_PIC
Type: Frame
Thêm biến
Tp. Hồ Chí Minh, tháng 09/2011 45
Exercise with OpenCV & VC++
Click phải Edit control -> Add Variable…
Thêm biến
Tp. Hồ Chí Minh, tháng 09/2011 46
Exercise with OpenCV & VC++
Thêm biến dạng Value
12
Thêm biến
Tp. Hồ Chí Minh, tháng 09/2011 47
Exercise with OpenCV & VC++
Click phải Picture control -> Add Variable…
Thêm biến
Tp. Hồ Chí Minh, tháng 09/2011 48
Exercise with OpenCV & VC++
Thêm biến dạng control
12
Phát sinh hàm xử lý sự kiện
Tp. Hồ Chí Minh, tháng 09/2011 49
Exercise with OpenCV & VC++
Click chọn control -> Properties ->-> Chọn sự kiện muốn xử lýAdd hàm xử lý sự kiện (dùng tên phương thức mặc định)
Phát sinh hàm xử lý sự kiện
Tp. Hồ Chí Minh, tháng 09/2011 50
Exercise with OpenCV & VC++
Hàm xử lý sự kiện
Lab1_MFCDlg.cpp
Lab1_MFCDlg.h
Những dòng code đầu tiên
Tp. Hồ Chí Minh, tháng 09/2011 51
Exercise with OpenCV & VC++
Bổ sung thuộc tính con trỏ kiểu IplImage vào lớp CLab1_MFCDlg
File Lab1_MFCDlg.h
Những dòng code xử lý
Tp. Hồ Chí Minh, tháng 09/2011 52
Exercise with OpenCV & VC++
File Lab1_MFCDlg.cpp
Tra cứu trên MSDN
Nhìn lại chương trình
Tp. Hồ Chí Minh, tháng 09/2011 53
Exercise with OpenCV & VC++
• Chương trình chạy được, nhưng:– Chuyện gì xảy ra khi browse file ảnh nhiều lần ?– Chuyện gì xảy ra khi tắt ứng dụng ?– Liệu đã đáp ứng đúng yêu cầu của đề chưa ?
Nội dung trình bày
• Giới thiệu thư viện lập trình OpenCV.
• Tổ chức thư viện OpenCV.
• Thiết lập sử dụng với VC++.
• Các cấu trúc dữ liệu quan trọng.
• Các hàm API quan trọng.
• Thực hành.
• Danh sách bài tập dự kiến.
Tp. Hồ Chí Minh, tháng 09/2011 54
The presentation outline
Danh sách bài tập dự kiến
Tp. Hồ Chí Minh, tháng 09/2011 55
List of exercises
• Các phép biến đổi màu sắc (2 tuần).
• Các phép biến đổi hình học (1 tuần).
• Các phép làm trơn ảnh (1 tuần).
• Phát hiện cạnh (1 tuần).
• Phân đoạn ảnh (2 tuần).
• Phân đoạn video (2 tuần).
Tài liệu tham khảo
• Bài giảng trên lớp.
• OpenCV Reference Manual, v2.2, December, 2010.
• Diễn đàn OpenCV.
• Google.
Tp. Hồ Chí Minh, tháng 09/2011 56
The references