获取 OpenCV 图像类型的枚举名称(例如 CV_32FC1)?

新手上路,请多包涵

在 OpenCV 的 C++ 接口中,检查图像的类型似乎很容易。如果您有图像 cv::Mat img = cv::imread("someImage.xyz") ,则只需执行 int theType = img.type()

但是,正如您所料,调用 img.type() 只会给出一个整数,而不是枚举名称(例如 CV_32FC1 )。

如果我知道 OpenCV 枚举的整数值,是否有一种简单的方法可以打印出枚举名称(例如 CV_32FC1 )?

原文由 solvingPuzzles 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

据我所知,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();
}

原文由 Sassa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题