harris算法是经典的角点检测算法。对静态的图片进行处理当然消耗内存和时间都非常的短,但是对摄像头采集的每一帧处理就需要花费很大的时间和内存,甚至可能因为内存泄露和空间不足而使电脑奔溃,在这里我运用简单的clock()函数测试各个主要函数的响应时间。
第一步:利用差分算子对图像进行滤波
start = clock();
// cout<<CV_MAT_ELEM(*mat_I,double,200,200)<<endl;
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
//定义水平方向差分算子并求Ix
double dx[9]={-1,0,1,-1,0,1,-1,0,1};
mat_Ix=mbys(mat_I,cxDIB,cyDIB,dx,3,3); //求Ix矩阵
// cout<<CV_MAT_ELEM(*mat_Ix,double,200,200)<<endl;
//定义垂直方向差分算子并求Iy
double dy[9]={-1,-1,-1,0,0,0,1,1,1};
mat_Iy=mbys(mat_I,cxDIB,cyDIB,dy,3,3);//求Iy矩阵
// cout<<CV_MAT_ELEM(*mat_Iy,double,200,200)<<endl;
for(j=0;j<cyDIB;j++)
for(i=0;i<cxDIB;i++)
{
S(pImgDx,i,j)=CV_MAT_ELEM(*mat_Ix,double,j,i);//为相应图像赋值
S(pImgDy,i,j)=CV_MAT_ELEM(*mat_Iy,double,j,i);
}
mat_Ix2=mbxy(mat_Ix,mat_Ix,cxDIB,cyDIB);//计算Ix2,Iy2,Ixy矩阵
mat_Iy2=mbxy(mat_Iy,mat_Iy,cxDIB,cyDIB);
mat_Ixy=mbxy(mat_Ix,mat_Iy,cxDIB,cyDIB);

本文通过clock()函数测试了Harris角点检测算法在处理摄像头每帧图像时的时间消耗,包括差分算子滤波、高斯平滑、角点量计算、局部非极大值抑制和最终角点检测等步骤。结果表明,从差分算子到高斯平滑的处理速度较慢,而计算角点量和局部非极大值抑制速度较快。整个过程的响应时间远超过理想状态,尤其是使用OpenCV内置函数时,需要进行优化以提高效率。
最低0.47元/天 解锁文章
14万+

被折叠的 条评论
为什么被折叠?



