使用指针访问内存与cv :: Mat :: at方法

时间:2017-03-08 16:10:43

标签: c++ opencv

在对这个主题做了一些研究后,我认为从cv :: Mat元素访问元素会比使用at方法更快(因为显然每次检查边界并且如果我理解正确就会进行乘法运算)!

虽然,我写了一个小测试,并且每次使用时似乎快了大约1000倍:/!所以我想我做错了但我无法弄清楚是什么......

有我的代码:

int main(int argc, char **argv) {

int k = 0;

int size[] = {100, 100};

cv::Mat image(2, size, CV_32SC1, cv::Scalar::all(0));

for (int i = 0; i < size[0]; i++) {
  for (int j = 0; j < size[1]; j++) {
    image.at<int>(i, j) = k;
    k++;
  }
}

int *myval;

int width = image.cols;
int height = image.rows;

myval = image.ptr<int>(0);
int val;

double t = (double)cv::getTickCount();
for (int i = 0; i < height*width; i++) {
    val = myval[i];
}
t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();
std::cout << "time ptr : " << t << std::endl;

t = (double)cv::getTickCount();
for (int i = 0; i < height; i++) {
  for (int j = 0; j < width; j++) {
    val = image.at<int>(i, j);
  }
}
t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();
std::cout << "time without ptr : " << t << std::endl;

}

所以基本上,它只访问我的矩阵的每个元素,什么都不做。 虽然我得到了这样的结果:

time ptr : 0.00017332
time without ptr : 2.77e-07

time ptr : 4.0991e-05
time without ptr : 7.6e-08

如果有人可以给我一些非常酷的解释或新想法!

谢谢大家:)

0 个答案:

没有答案