1. ホーム
  2. opencv

[解決済み] OpenCV の Mat::type() を使って,Mat オブジェクトの型が何であるかを調べる方法

2022-05-14 01:29:47

質問

私は type() メソッドの Mat オブジェクトを生成します.

以下のような行があった場合

mat = imread("C:\someimage.jpg");
type = mat.type();

type = 16 . mat matrixの種類を調べるにはどうしたらいいのでしょうか?

そのマニュアルや何冊かの本で答えを探したのですが、無駄でした。

どのように解決するのですか?

ここに、実行時に opencv の行列を識別するのに役立つ便利な関数があります。少なくともデバッグの際には有用だと思います。

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;
}

もし MMat のように呼び出すことができます。

string ty =  type2str( M.type() );
printf("Matrix: %s %dx%d \n", ty.c_str(), M.cols, M.rows );

などのデータが出力されます。

Matrix: 8UC3 640x480 
Matrix: 64FC1 3x2 

注目すべきは、Matrixメソッドもあることです。 Mat::depth()Mat::channels() . この関数は、ビットがすべて同じ値に格納されているこれら2つの値の組み合わせから、人間が読み取れる解釈を得るための便利な手段に過ぎません。