告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐我使用M.ptr<float>(i)此类方法。这不禁勾起了我测试一下的冲动。下面就为大家奉上我的测试结果。
我这里测试了三种操作Mat数据的办法,套用流行词,普通青年,文艺青年,为啥第三种我不叫2b青年,大家慢慢往后看咯。
普通青年的操作的办法通常是M.at<float>(i, j)
文艺青年一般会走路线M.ptr<float>( i )[ j ]
暴力青年通常直接强制使用我第40讲提到的M.data这个指针
实验如下:
- t = (double)getTickCount();
- Mat img1(1000, 1000, CV_32F);
- for (int i=0; i<1000; i++)
- {
- for (int j=0; j<1000; j++)
- {
- img1.at<float>(i,j) = 3.2f;
- }
- }
- t = (double)getTickCount() - t;
- printf("in %gms\n", t*1000/getTickFrequency());
- //***************************************************************
- t = (double)getTickCount();
- Mat img2(1000, 1000, CV_32F);
- for (int i=0; i<1000; i++)
- {
- for (int j=0; j<1000; j++)
- {
- img2.ptr<float>(i)[j] = 3.2f;
- }
- }
- t = (double)getTickCount() - t;
- printf("in %gms\n", t*1000/getTickFrequency());
- //***************************************************************
- t = (double)getTickCount();
- Mat img3(1000, 1000, CV_32F);