opencv 有 constexpr 向量或矩阵容器吗?

问题描述 投票:0回答:1

我想做这样的事情,例如:

constexpr std::array<cv::Vec3b, 6> COLORS {
    cv::Vec3b(0, 255, 0), // green
    cv::Vec3b(255, 0, 0), // blue
    cv::Vec3b(0, 0, 255), // red
    cv::Vec3b(0, 255, 255), // yellow
    cv::Vec3b(255, 0, 255), // magenta
    cv::Vec3b(255, 255, 0) // cyan
}

但是,

cv::Vec3b
不能做成constexpr,opencv中是否支持constexpr容器?或者有其他方法解决这个问题?

编译器错误:

error: the type ‘const std::vector<cv::Vec<unsigned char, 3> >’ of ‘constexpr’ variable ‘COLORS’ is not literal
 };

谢谢你

c++ opencv constexpr
1个回答
0
投票

根据 4.10 和 5.0pre 版本的 OpenCV 源代码状态,不支持 constexpr 类。事实上,一个可 constexpr 的类需要一个声明为 constexpr 的构造函数,而且似乎还没有这样的类。一个很好的候选者是 Scalar,根据文件 opencv/modules/core/include/opencv2/core 的文档和评论 /types.hpp,用于像素值。

/** @brief 从 Vec 派生的 4 元素向量的模板类。

源自 Vec<_Tp, 4> ,可以使用 Scalar_ 和 Scalar 就像典型的 4 元素向量一样。此外,它们还可以转换 往返 CvScalar 。 Scalar 类型在 OpenCV 中广泛用于传递 像素值。 */

constexpr 构造函数允许在编译时构造类并在 constexpr 上下文中使用。

© www.soinside.com 2019 - 2024. All rights reserved.