マットタイプ | 対応するデータ型 |
---|---|
CV_8UC1 | 符号なし文字 |
CV_8SC1 | 文字 |
CV_16UC1 | 符号なしショート |
CV_16SC1 | 短い |
CV_32UC1 | unsigned int / unsigned long |
CV_32SC1 | 整数 / 長整数 |
CV_32FC1 | 浮く |
CV_64FC1 | ダブル |
C++ では、通常、
char は 1 バイト (8 ビット)、
short は 2 バイト (16 ビット)
、int は 4 バイト (32 ビット)、
float は 4 バイト (32 ビット)、
double は 8 バイト (64 ビット) です。
予防
配列を Mat 型に変換するときは、上記の表のデータ型と一致するように注意してください。そうでないと、いくつかの奇妙な問題が発生します。
例:
Mat に変換して浮動小数点演算を実行する必要がある Int 型の配列があります。
int ddd[3] = {
197111, 297111, 397111};
cv::Mat height_img = cv::Mat(1, 3, CV_32SC1, ddd);
cv::Mat gray_img;
height_img.convertTo(gray_img, CV_32FC1);
gray_img = gray_img / 100000.0;
std::cout << gray_img;
その方法は、 Int 配列を Mat に変換するときに選択しCV_32SC1
、その Mat を変換してCV_32FC1
浮動小数点演算を実行するというものです。
覚えておいてください: 初期化中に直接選択しないでくださいCV_32FC1
。そうしないと、後続の計算でも整数演算として扱われます。