OpenCV const矩阵 - 不总是const?

时间:2018-03-20 16:28:03

标签: opencv

我有这段代码(opencv 3.4.1):

void addText(const cv::Mat& mat) 
{
  cv::putText(mat, "test", cv::Point2f(100, 100), cv::FONT_HERSHEY_PLAIN, 2, cv::Scalar(0, 0, 255, 255));
}

我当时希望编译器拒绝它,但令我惊讶的是它编译时没有任何警告(我认为定义为const就足以防止对mat进行任何更改)。

防止任何错误更改为cv :: Mat内容的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

declaration of putText。并在mat.hpp

中输入typedef

发生的事情是InputOutputArray定义为与OutputArray相同,后者具有非显式constructor from a const Mat reference

正因为如此,你的Mat常量被有效地吞噬了。 如果你真的关心const-correctness,不要直接使用Mat,用适当的const-correct代理/装饰器包装它们和你调用的OpenCV方法。