OpenCV là một thư viện các hàm lập trình nhằm mục đích hỗ trợ vấn đề thị giác
máy tính trong thời gian thực. OpenCV được phát triển từ Intel và hiện đang được hỗ
trợ bởi tổ chức Willow Garage. Nó được phát hành miễn phí dựa trên giấy phép mã nguồn mở BSD. Thư viện OpenCV có khả năng thực hiện đa nền tảng trên các hệ điều hành khác nhau (Windows, Linux, Mac) và tập trung chủ yếu vào các hàm xử lý ảnh từ cơ bản đến phức tạp. OpenCV có trên 500 hàm xử lý ảnh được phân thành các nhóm : các hàm xử lý ảnh tổng quát, phân mảnh, các phép biến đổi hình học, phát
Hình 3.5 : Giới thiệu OpenCV
Do đó thư viện OpenCV sẽ hỗ trợ giải quyết các vấn đề cơ bản về xử lý ảnh giúp
cho người phát triển tập trung vào giải thuật, phương pháp chính để giải quyết vấn đề.
§ Giới thiệu một số hàm trong thư viện OpenCV thông dụng được sử dụng trong luật văn này :
Hàm định dạng lại kích thước ảnh
void cvResize(const CvArr* src, CvArr* dst,
int interpolation=CV_INTER_LINEAR)
trong đó giải thuật nội suy được sử dụng là CV_INTER_NN (giải thuật giá trị điểm lân cận đã được giới thiệu trong mục 2.2.4)
Hàm biến đổi không gian màu từ không gian RGB không gian HSV
với code = CV_RGB2HSV, hàm thực hiện biến đổi một ảnh đầu vào src
được biểu diễn dưới dạng không gian màu RGB thành ảnh kết quả dstđược thể
hiện bằng không gian màu HSV bởi công thức chuyển đổi sau:
max( , , ) V R G B min( , , ) 0 0 0 V R G B khi V S V V (3.1) 60( ) / 120 60( ) / 240 60 G B S if V R H B R S if V G if V B Nếu H0 thì HH360
Hàm biến đổi khoảng cách (distance transform)
void cvDistTransform(const CvArr* src, CvArr* dst,
int distance_type=CV_DIST_L2, int mask_size=3, const float* mask=NULL,CvArr* labels=NULL)
Hàm trả về ảnh kết quả dst từ ảnh đầu vào src qua phép biến đổi khoảng
cách với phương pháp là distance_type (mặc định là CV_DIST_L2) như ví dụ
sau:
Hình 3.6 : Ví dụ về phép biến đổi khoảnh cách với distance_type = CV_DIST_C2
Hàm giới hạn ngưỡng cực đại cho từng điểm ảnh
double cvThreshold(const CvArr* src, CvArr* dst, double threshold, double maxValue, int thresholdType)
Hàm được sử dụng để giới hạn ngưỡng giá trị của ảnh đầu vào src thành ảnh đầu ra dst với ngưỡng giới hạn là threshold và tùy loại biến đổi thresholdType
mà sẽ có giá trị đầu ra khác nhau như sau:
Hàm thiết lập vùng ảnh con quan tâm trên một ảnh lớn
void cvSetImageROI(IplImage* image, CvRect rect)
Thiết lập vùng ảnh quan tâm ROI (region of interest) được xác định bởi hình chữ nhật rect trên ảnh image, các phép toán xử lý ảnh sau này sẽ chỉ ảnh hưởng, tác động tới vùng quan tâm ROI mà thôi.
Hàm vẽ đường bao hình chữ nhật
void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int lineType=8, int shift=0)
Hàm được sử dụng để vẽ một hình chữ nhật được xác định bởi các đỉnh pt1, pt2 lên ảnh img với các tùy chọn về màu sắc, nét vẽ,…
Hàm tìm đường bao của đối tượng
int cvFindContours(CvArr* image, CvMemStorage* storage,
CvSeq** first_contour, int header_size=sizeof(CvContour), intmode=CV_RETR_LIST,
int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0, 0))
Hàm này được sử dụng để tìm đường bao của đối tượng thể hiện trong ảnh nhị
phân image. Kết quả tạo ra được tập các đường bao ngoài và bao trong được
chứa trong cấu trúc CvSeq là first_contour với cách thức sắp xếp quy định
bởi mode.
Hình 3.7 : một ảnh đầu vào (hình trên) được đưa vào hàm cvFindContours thì ta thu được kết
quả như hình dưới, các đường bao tìm thấy sẽ được chia thành 2 dạng là đường bao ngoài (ký hiệu c...) và các đường bao trong ( được xem là lỗ, ký hiệu h....)
Ví dụ hình 3.7 mô tả tính năng tìm kiếm đường bao của hàm cvFindContours. Các đường bao sau khi được xác định sẽ được sắp xếp theo một trật tự nhất định quy đình bởi mode và có các giá trị sau :
Hàm thể hiện ảnh ra giao diện người dùng
void cvShowImage(const char* name, const CvArr* image)
Hàm này dùng để xuất ảnh image ra cửa sổ người dùng được xác định bởi tên cửa sổ name. Hàm này chỉ được sử dụng trong môi trường hỗ trợ giao diện
KDE.
…………..