OpenCV如何正确获取cv::Mat逆矩阵且不修改原矩阵
OpenCV
cv::Mat::inv() 问题解答 你所写的如下实现完全正确,可以满足「在独立容器中生成逆矩阵、不修改原始矩阵」的要求:
cv::Mat mat1 = //... cv::Mat mat2 = mat1.inv();
针对你的疑问,结论非常明确:
inv()会生成独立的矩阵副本:该方法执行时会申请全新的内存空间存储求逆计算的结果,返回的cv::Mat对象和原矩阵不存在任何内存共享,和你日常使用clone()生成的副本性质完全一致,后续修改mat2的内容不会对mat1造成任何影响。inv()不会修改原始矩阵:首先inv()是cv::Mat的const成员方法,C++语法层面就限制它不能修改调用该方法的原矩阵实例;其次OpenCV内部的求逆逻辑不会在原矩阵的内存空间上做原地运算,所有中间计算过程都使用独立的临时内存,完全不会改动原矩阵存储的任何数据。
内容的提问来源于stack exchange,提问作者RedBox
相关产品推荐
相关产品推荐

