【发布时间】:2015-09-06 06:10:53
【问题描述】:
我有一个 [32678 x 10] 矩阵 (w2c),我想将它的 24700 行复制到另一个矩阵 (out)。我有要在向量中复制的行的索引(index)。为了在 matlab 中执行此操作,我这样做:
out = w2c(index_im,:);
大约需要 0.002622 秒。
在 OpenCV 中:
Mat out(index.cols, w2c.cols, w2c.type());
for (int i = 0; i < index.cols; ++i) {
w2c.row(index.at<int>(i) - 1).copyTo(out.row(i));
}
大约需要 0.015121 秒。
如您所见,Matlab 快了 6 倍。如何让 OpenCV 代码高效?
我正在使用 cmake-2.9、g++-4.8、opencv-2.4.9、ubuntu 14.04
更新:
我在发布模式下运行我的代码,结果如下(它仍然比 Matlab 慢很多)
RELEASE DEBUG MATLAB
0.008183 0.010070 0.001604
0.009630 0.010050 0.001679
0.009120 0.009890 0.001566
0.007534 0.009567 0.001635
0.007886 0.009886 0.001840
【问题讨论】:
-
index向量的内容是什么样的?它是一个还是多个连续的部分?请提供您的 OpenCV 代码的Minimal, Complete, and Verifiable example。 -
index向量是一个1行24700列的矩阵,是连续的。 -
以什么方式连续?它是否存储值,例如0 到 24699?它包含什么?
-
连续为
index.isContinious()。它包含 0 到 32677 之间的随机数,并且没有任何特定的顺序。 -
添加更多详细信息:哪个 OpenCV 版本、哪个编译器、哪个编译器标志、哪个操作系统以及完整的示例代码