Kiểu dữ liệu trong opencv

1.Các cấu trúc dữ liệu cơ bản.

Kiểu dữ liệu đơn giản nhất là Point. Lớp Point là một lớp template, tức là ta có thể khai báo kiểu Point của kiểu integer, float … Lớp Point có thể là Point 2 chiều (như không gian toạ độ Oxy), có thể là Point 3 chiều (như không gian toạ độ Oxyz).
Ví dụ:

Default constructors cv::Point2i p();
cv::Point3f p();
Copy constructor cv::Point3f p2( p1 );  
Value constructors cv::Point2i p( x0, x1 );
cv::Point3d p( x0, x1, x2 );

– cv::Size : Chứa thông tin để lưu lại kích thước. VD: cv::Size(int w=0, int h=0);
– cv::Rect : Chứa thông tin hình chữ nhật.VD: cv::Rect(x,y, width, height);
– Scalar :Lớp scalar là một lớp point với 4 chiều

2.Kiểu dữ liệu Mat

Mat cơ bản là một lớp với hai phần dữ liệu: phần đầu ma trận (có chứa thông tin như kích thước của ma trận, phương pháp được sử dụng để lưu trữ, tại đó địa chỉ là ma trận được lưu trữ, …) và một con trỏ tới ma trận có chứa giá trị pixel.
Lớp Mat trong opencv nằm trong modules core của bộ thư viện opencv và nằm trong namespace cv của bộ thư viện.
Các contructor thường sử dụng với Mat:
Mat(int rows, int cols,  type);
Trong đó:
rows là số dòng của ma trận (hay chính là chiều cao của hình ảnh ).
cols là số cột của ma trận (hay chính là chiều rộng của ảnh).
tham số thứ 3 (type) có dạng CV_[số bit cho 1 channel ][kiểu có dấu, không dấu, số thực]C[Số channel ]
Ví dụ:
CV_8UC1 : Có nghĩa là một điểm ảnh sẽ có 1 channel dùng 8 bit không dấu để biểu diễn
CV_8UC3 : Có nghĩa là một điểm ảnh sẽ có 3 channel, mỗi channel dùng 8 bit không dấu để biểu diễn.

Thay vì truyền rows và cols ta có thể truyền size với format Size(rows, cols) vào.
Mat(Size size, type);

Ví dụ:
Mat a = Mat(3, 3, CV_8UC1);
cout << a << endl;

Kết quả:

[  x0,   x1,   x2;
x3,   x4,   x5;
x6,   x7,   x8]
Khi sử dụng 3 chanel
Mat a = Mat(3, 3, CV_8UC3);
cout << a << endl;

Kết quả:
[  x0,   y0,   z0,   x1,   y1,   z1,   x2,   y2,   z2;
x3,   y3,   z3,   x4,   y4,   z4,   x5,   y5,   z5;
x6,   y6,   z6,   x7,   y7,   z7,   x8,   y8,   z8]

3.Các cấu trúc thường dùng với Mat và cách truy cập dữ liệu trong ma trận Mat.

mat.clone() : Phương thức trả về đối tượng Mat có dữ liệu giống với mat.
mat.copyTo(OutputArray m) : Giống như phương thức trên nhưng phương thức này chúng ta phải truyền vào tham số là 1 OutputArray
Ví dụ:
Mat B = A.clone();
Mat C;
A.copyTo(C);

Có 3 phương thức khởi tạo các giá trị đặc biệt là zeros, ones, eyes :
Mat::zeros(int rows, int cols, int type);
Mat::ones(int rows, int cols, int type);
Mat::eyes(int rows, int cols, int type);

zeros sẽ trả về một Mat có tất cả các phần tử là 0, ones sẽ trả về một Mat có tất cả các phần tử là 1, eyes sẽ trả về một Mat có các phần tử trên đường chéo chính là 1 và các phần tử còn lại là 0.

Để truy cập vào ma trân Mat ta sử dụng cấu trúc:
mat.at<kiểu dữ liệu>(toạ độ diểm cần truy cập)
Ví dụ : mat.at<double>(5,7);

Leave a Reply

Your email address will not be published. Required fields are marked *