Tạo chu tuyến và đánh dấu đối tượng

Một phần của tài liệu Nghiên cứu so sánh các phương pháp xác định vận tốc của xe cộ dùng xử lý ảnh (Trang 47 - 49)

Sau khi đã trừ nền thành công để trích ra ảnh nền, ta sẽ vẽ chúng dưới dạng ảnh nhị phân. Việc tiếp theo cần làm là đánh dấu các đối tượng. Tạo chu tuyến là việc xửlý đểđánh dấu đường viền các cạnh của đối tượng, làm cho chúng dễ được nhận biết hơn. Trong lĩnh vực thị giác máy tính, biên của các đối tượng thường được định nghĩa là vùng các điểm ảnh mà tương phản với vùng lân cận hoặc vùng chuyển động của nó.

Hàm để tìm và tạo chu tuyến trong OpenCV rất hữu dụng, nó cung cấp các thông tin bổ sung của đối tượng như kích thước, điểm trọng tâm, các điểm có thể được sử dụng để vẽ một hình hộp bao quanh đối tượng. Điểm trọng tâm của đối tượng rất hữu ích cho bước xử lý tiếp theo đó là theo vết đối tượng, nó hoạt động như một điểm đặc trưng tốt (good feature point) cho đối tượng.

Hàm tạo chu tuyến trong OpenCV sử dụng cấu trúc dữ liệu tương tự như các danh sách liên kết lưu trữ các nút chu tuyến, trong đó các nút chu tuyến này thường là góc hoặc chỗ lượn của đối tượng. Trước khi các chu tuyến được vẽ, hàm cvFindContours cần được thực hiện để lấy được danh sách các nút chu tuyến:

int cvFindContours( IplImage* img,

CvMemStorage* storage, CvSeq** firstContour,

42

int headerSize = sizeof(CvContour),

CvContourRetrievalMode mode, = CV_RETR_LIST,

CvChainApproxMethod method = CV_CHAIN_APPROX_SIMPLE );

Sau khi lấy được danh sách các nút chu tuyến, ta tiến hành vẽ chu tuyến với việc sử dụng hàm: void cvDrawContours ( CvArr *img, CvSeq* contour, CvScalar external_color, CvScalar hole_color, int max_level,

int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8),

CvPoint offset CV_DEFAULT(cvPoint(0,0)) );

Xác định một hình hộp bao quanh đối tượng sử dụng hàm: CvRect cvBoundingRect(

CvArr* points,

int update CV_DEFAULT(0) );

Sau đó, ta vẽ một hình chữ nhật bao quanh đểđánh dấu đối tượng với hàm: void cvRectangle(

CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,

int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8),

43

int shift CV_DEFAULT(0) );

Kết quả khi chạy chương trình:

Hình 3.2: Kết quả tạo chu tuyến và đánh dấu đối tượng

Một phần của tài liệu Nghiên cứu so sánh các phương pháp xác định vận tốc của xe cộ dùng xử lý ảnh (Trang 47 - 49)