यहां एक आसान कार्य है जिसका उपयोग आप रनटाइम पर अपने ओपनवेट मैट्रिसेस की पहचान करने में मदद करने के लिए कर सकते हैं। मुझे यह डिबगिंग के लिए उपयोगी लगता है, कम से कम।
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;
}
यदि M
एक प्रकार का संस्करण है Mat
तो आप इसे इस तरह से कॉल कर सकते हैं:
string ty = type2str( M.type() );
printf("Matrix: %s %dx%d \n", ty.c_str(), M.cols, M.rows );
डेटा का उत्पादन करेगा जैसे:
Matrix: 8UC3 640x480
Matrix: 64FC1 3x2
इसके लायक ध्यान देने योग्य बात यह भी मैट्रिक्स तरीके हैं कि Mat::depth()
और Mat::channels()
। यह फ़ंक्शन उन दो मूल्यों के संयोजन से मानव पठनीय व्याख्या प्राप्त करने का एक आसान तरीका है जिनके बिट्स सभी एक ही मूल्य में संग्रहीत हैं।
depth()
और का उपयोग करना पसंद करते हैंchannels()
,type()
जो डेटाटाइप और चैनलों की संख्या के बीच एक जटिल मिश्रण देता है।