cv::Mat::t() 和 cv::transpose() 的区别

12
这两个转置方法在opencv中有何不同?
使用cv::Mat::t():

cv::Mat::t()

cv::Mat a;
a = a.t();

Using cv::transpose():

cv::Mat a;
cv::transpose(a,a);

我对效率特别感兴趣。


一个似乎是原地操作,另一个则写入到单独的输出。 - Kerrek SB
@KerrekSB 感谢您的评论。那么,第一个是更有效的,这种说法正确吗? - justHelloWorld
1
我认为那不是一个明智的问题。这两个函数执行不同的任务。它们各自在所做的事情上都尽可能地高效。 - Kerrek SB
从我的了解来看,在原地操作意味着不分配内存,这比非原地方法(如第二种方法)更有效率。因此,在这种特定情况下,第一种方法更高效。我错了吗? - justHelloWorld
我在这件事上支持@KerrekSB的观点。如果你想使用转置来解决另一个表达式,那么请使用第一种方法;如果你想要转置矩阵,则使用第二种方法。 - Rick M.
1个回答

11

没有区别。这是opencv/modules/core/src/matop.cppcv::Mat::t()的代码:

MatExpr MatExpr::t() const
{
    MatExpr e;
    op->transpose(*this, e);
    return e;
}

所以cv::Mat::t()只是调用了cv::transpose()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接