OpenCV中构造Mat矩阵赋值和复制的时间消耗


对OpenCV中的Mat矩阵的复制,创建等操作的时间消耗

代码如下:

clock_t t1,t2;

t1 = clock();

Mat mat1(10000,5000,CV_64FC1,Scalar::all(0.0));

t2 = clock();

cout<<"Mat mat1(10000,5000,CV_64FC1,Scalar::all(0.0))\t"<<t2-t1<<endl;

 

{

t1 = clock();

Mat mat2(mat1);

t2 = clock();

cout<<"Mat mat2(mat1)\t"<<t2-t1<<endl;

}

 

{

Mat mat3(500,500,CV_64FC1,Scalar::all(0.0));

t1 = clock();

mat3 = mat1;

t2 = clock();

cout<<"mat3 = mat1;\t"<<t2-t1<<endl;

}

 

{

Mat mat4;

t1 = clock();

mat1.copyTo(mat4);

t2 = clock();

cout<<"mat1.copyTo(mat4);\t"<<t2-t1<<endl;

}

 

{

Mat mat4;

t1 = clock();

mat4 = mat1.clone();

t2 = clock();

cout<<"mat4 = mat1.clone();\t"<<t2-t1<<endl;

}

 

{

Mat mat5(10000,5000,CV_32FC1,Scalar::all(0.0));

t1 = clock();

mat1.convertTo(mat5,CV_32FC1);

t2 = clock();

cout<<"mat1.convertTo(mat5,CV_32FC1);\t"<<t2-t1<<endl;

}

一个典型的输出。

Mat mat1(10000,5000,CV_64FC1,Scalar::all(0.0))  540

Mat mat2(mat1)  0

mat3 = mat1;    1

mat1.copyTo(mat4);      515

mat4 = mat1.clone();    465

mat1.convertTo(mat5,CV_32FC1);  488

另一个运行的输出。

Mat mat1(10000,5000,CV_64FC1,Scalar::all(0.0))  391

Mat mat2(mat1)  0

mat3 = mat1;    0

mat1.copyTo(mat4);      433

mat4 = mat1.clone();    453

mat1.convertTo(mat5,CV_32FC1);  495

从结果中可以看到,拷贝构造函数和赋值的时间可以忽略不计,但Mat::copyTo、Mat::clone、Mat::convertTo等需要申请空间或复制数据的操作就需要大量的时间。

附:


for (std::vector<Mat>::iterator iter = vecSrcImg.begin(); iter != vecSrcImg.end(); iter++/****/)
{
t1 = (double)cvGetTickCount();
//Mat srcMat( srcImg.rows, srcImg.cols, CV_8UC(1), Scalar::all(0) );//12ms
Mat srcMat(srcMatTemp);//0.2ms
srcMat = *iter;//10ms
//Mat dstMat(srcImg.rows, srcImg.cols, CV_8UC(1), Scalar::all(0));//12ms
Mat dstMat(srcMatTemp);//0.2ms
//Gassian_Histogram(srcMat, dstMat, 2.0);
 
  unsigned char* imgData = srcMat.data;
Gassian_like_histogram(imgData, srcImg.cols, srcImg.rows, 2.0);
tempT = (double)cvGetTickCount() - t1;
printf( " histogramGaussian cost time = %gms\n", tempT/((double)cvGetTickFrequency()*1000.) );

  dstMat.data = imgData;

vecDstImg.push_back(dstMat);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值