我前段时间实现了Python中的Procrustes Analysis算法,并被告知最近将它移植到OpenCV/C++.在完成它之后,我运行了一些测试,对于相同的输入/实例,C++代码花费了Python代码的两倍时间(大约分别为8秒和4秒.为了确保我,我重复测试一千次)我不是在一个太小的时期测量它们.我对这些结果感到困惑.
我已经使用gprof试图理解发生了什么,但除了cv :: Mat :: ~Mat()占用34.67%的执行时间并被调用之外,我无法说出错误.比任何其他功能多100倍.不知道我应该怎么做,除非我应该替换std :: vectors或raw数组的cv :: Mats,这对我来说似乎都是不好的做法.
void align(const cv::Mat& points, const cv::Mat& pointsRef, cv::Mat& res, cv::Mat& ops) {
cv::Mat pts(points.rows, points.cols, CV_64FC1);
cv::Mat ptsRef(points.rows, points.cols, CV_64FC1);
points.copyTo(pts);
pointsRef.copyTo(ptsRef);
cv::Mat avgs = meanOfColumns(pts);
for(int i = 0; i < avgs.cols; i++) {
pts.col(i) -= avgs.col(i);
}
cv::Mat avgsR = meanOfColumns(ptsRef);
for(int i = 0; i < avgsR.cols; i++) {
ptsRef.col(i) -= avgsR.col(i);
}
cv::Mat x2(pts.rows, 1, CV_64FC1);
cv::Mat y2(pts.rows, 1, CV_64FC1);
cv::Mat x2R(pts.rows, 1, CV_64FC1);
cv::Mat …Run Code Online (Sandbox Code Playgroud)