matlab一阶差分函数,Opencv 向量的一階差分函數封裝實現 功能等價於Matlab的diff函數 附:顯示CvMat的函數封裝 | 學步園...

最初用opencv的cvNorm函數,發現結果錯的一塌糊塗! 多方查找沒有cvNorm太多的介紹,後來仔細查閱,從cvNorm等價於Matlab的norm函數出發尋找線索,而顯然matlab里norm函數不同與diff函數,無奈自己封裝吧。

CvMat* DiffMat(CvMat *B)  //求向量B的一階差分 功能等價matlab里的diff

{

int cols = B->cols;

CvMat*Out = cvCreateMat(1, cols-1, B->type);

const float*pB = (const float*)(B->data.ptr);

float*pOut = ( float*)(Out->data.ptr);

for(int i=0; i

{

*pOut = *(pB+1)-*pB;

pB++;

pOut++;

}

return Out;

}

注意:1,輸入B是個向量,且為行向量

2,返回的是一個CvMat

3,數據類型默認的是float,在申請指針時用到了。

調用示例如下:

CvMat *diffMat = cvCreateMat(1,InMat->cols-1, InMat->type);

diffMat = DiffMat(InMat);

另附,打印一個CvMat數據的函數封裝,調用該函數可以方便查看矩陣中的元素。

void PrintMat(CvMat* A)

{

int i,j;

//printf("/nMatrix = :");

for(i=0;irows;i++) //行

{

printf("/n");

switch( CV_MAT_DEPTH(A->type) )

{

case CV_32F:

case CV_64F:

for(j=0;jcols;j++) //列

//獲取2維數組的元素

printf("%9.3f ", (float) cvGetReal2D( A, i, j ));

break;

case CV_8U:

case CV_16U:

for(j=0;jcols;j++)

printf("%6d",(int)cvGetReal2D( A, i, j ));

break;

default:

break;

}

}

printf("/n");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值