22

OpenCV への C++ インターフェイスでは、イメージのタイプをチェックするのは簡単に思えます。イメージがある場合は、cv::Mat img = cv::imread("someImage.xyz")そのまま実行しますint theType = img.type()

ただし、ご想像のとおり、呼び出しimg.type()は列挙型の名前ではなく整数を与えるだけです (例: CV_32FC1)。

CV_32FC1OpenCV 列挙型の整数値がわかっている場合、列挙型名 (例: ) を出力する簡単な方法はありますか?

4

2 に答える 2

31

私の知る限り、そのような関数は OpenCV には存在しません。

それらを取得するには、独自の関数を作成する方がよいと思います。多くのスイッチケースがありますが、それでうまくいくと思います。列挙はここにあります。

編集:

これは、タイプを抽出するために使用できるものです。もっと効率的な方法があると思いますが、今は頭を悩ませることはできません。

std::string getImageType(int number)
{
    // find type
    int imgTypeInt = number%8;
    std::string imgTypeString;

    switch (imgTypeInt)
    {
        case 0:
            imgTypeString = "8U";
            break;
        case 1:
            imgTypeString = "8S";
            break;
        case 2:
            imgTypeString = "16U";
            break;
        case 3:
            imgTypeString = "16S";
            break;
        case 4:
            imgTypeString = "32S";
            break;
        case 5:
            imgTypeString = "32F";
            break;
        case 6:
            imgTypeString = "64F";
            break;
        default:
            break;
    }

    // find channel
    int channel = (number/8) + 1;

    std::stringstream type;
    type<<"CV_"<<imgTypeString<<"C"<<channel;

    return type.str();
}
于 2012-09-09T01:59:39.657 に答える