Đây là một chức năng hữu ích mà bạn có thể sử dụng để giúp xác định ma trận opencv của bạn trong thời gian chạy. Tôi thấy nó hữu ích cho việc gỡ lỗi, ít nhất.
string type2str(int type) {
string r;
uchar depth = type & CV_MAT_DEPTH_MASK;
uchar chans = 1 + (type >> CV_CN_SHIFT);
switch ( depth ) {
case CV_8U: r = "8U"; break;
case CV_8S: r = "8S"; break;
case CV_16U: r = "16U"; break;
case CV_16S: r = "16S"; break;
case CV_32S: r = "32S"; break;
case CV_32F: r = "32F"; break;
case CV_64F: r = "64F"; break;
default: r = "User"; break;
}
r += "C";
r += (chans+'0');
return r;
}
Nếu M
là kiểu var, Mat
bạn có thể gọi nó như vậy:
string ty = type2str( M.type() );
printf("Matrix: %s %dx%d \n", ty.c_str(), M.cols, M.rows );
Sẽ xuất dữ liệu như:
Matrix: 8UC3 640x480
Matrix: 64FC1 3x2
Đáng chú ý của nó là cũng có các phương pháp Ma trận Mat::depth()
và Mat::channels()
. Hàm này chỉ là một cách tiện dụng để con người có thể đọc được từ sự kết hợp của hai giá trị mà các bit của chúng đều được lưu trữ trong cùng một giá trị.
depth()
vàchannels()
thay vì sử dụngtype()
trả về sự kết hợp phức tạp giữa kiểu dữ liệu và số kênh.