cvReshape比cvTranspose,cvGetRow,cvSetRow

1.在求矩阵转置方面,cvReshape比cvTranspose要好:
cvMat* matT, hdr;
matT = cvReshape( mat, &hdr, CV_MAT_CN(mat->type), mat->cols );
以上方式比下边的方式要好
CvMat* matT = cvCreateMat( mat->cols, mat->rows, mat->type );
cvTranpose( mat, matT );
cvReleaseMat( &matT );
原因是cvReshape在转置时不需要内存分配。
CvMat* mat, hdr;
mat = cvReshape( orig, &hdr, nChannel, nRow );
mat的地址指向的是orig的地址,而没有重新分配地址,形如CvMat* cvXxx( const CvMat*, &hdr )的函数都是这样的。
当然这种方式只适用于部分向量,而不适用于由
cvGetRow或者cvGetCols得到的向量,因为这样得到的向量内存是不连续的。
2.通过cvGetRow达到cvSetRow的目的
这个纯属是上边那个结论的小技巧,我们用cvGetRow取出指定行,其实就是取出指向指定行的地址,
然后用cvCopy来修改,原行自然就被改动了:
CvMat *row, hdr;
row = cvGetRow( mat, &hdr, 1 );
cvCopy( another_row, row );
// mat also modified.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值