我有这段代码(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内容的最佳做法是什么?
答案 0 :(得分:1)
见declaration of putText。并在mat.hpp
中输入typedef发生的事情是InputOutputArray定义为与OutputArray相同,后者具有非显式constructor from a const Mat reference。
正因为如此,你的Mat常量被有效地吞噬了。 如果你真的关心const-correctness,不要直接使用Mat,用适当的const-correct代理/装饰器包装它们和你调用的OpenCV方法。