OpenCV操作基本矩阵运算

最近两周做的项目是要将matlab里面的算法转变为C语言,matlab处理矩阵运算实在太牛B了,几个简单的字符就代表了很多的操作,为了项目的需要,又不能影响软件运行速度,因此我在工程中使用了OpenCV的库进行矩阵操作。好在有这个使用比较方便的开源库啊!

在matlab中,可以随意给一个变量(通常都是突然出现的)传递任意维数的矩阵,这下可苦了我们这些做“翻译”工作的程序员了。闲话少说,还是介绍一下我使用矩阵的理解吧。

OpenCV中,可以将一个矩阵和一个数组(或是指针)关联起来,这样对矩阵进行运算,关联的数组的元素值就会改变。有时候可以比较方便的用指针进行后续的操作。

举个例子吧:

CvMat *temp;

float a[9];

temp = cvCreatMat(3,3,CV_32FC1);(这个不能少)

cvInitMatHeader(temp,3,3,CV_32FC1,a,CV_ATUO_STEP);(这里矩阵形式可以有很多)

(上次这个地方描述有错误,这里内容关联的时候,temp最好使用CvMat类型的引用即CvMat temp,cvInitMatHeader(&temp,3,3,CV_32FC1,a,CV_ATUO_STEP);,向上面说的那样,也可以得到正确的结果,不过有内存泄漏,因为cvInitMatHeader的返回值是一个CvMat*,相当于分配了两次空间,最后cvReleaseMat的时候就容易内存泄漏,这是在工程实际运行中测试发现的。不过不知道cvReleaseMat两次能不能解决内存泄漏,太麻烦了就没有实验。)

这样数组a与矩阵temp就关联起来了,如果该矩阵进行一些操作后,如果矩阵里面元素的值改变了,那么a数组对应的元素值也会改变。

操作完了之后,如果cvReleaseMat(temp);矩阵空间释放了,但是a数组的值还是存在的,不受影响。

 

还有一个比较好用的函数,cvReduce,可以对应matlab里面的[log, index] = sum(ans);(min(ans))之类的操作,不过cvReduce的功能要少一些,只能求出每行(列)最大(最小或平均等)值,无法给出index项,如果需要index还需要另外自己进行判断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值