我想做这样的事情,例如:
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
};
谢谢你
根据 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 上下文中使用。