在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
项目需要将matlab代码写成C++,准备用opencv。opencv中矩阵的存储与matlab有所不同,应注意以下问题: 1、matlab中矩阵是按照列优先存储的。对于n0*n1*...*nn维的矩阵,具体存储方式是:(a0(0),a1(0),...,an(0)),(a0(1),a1(0),...an(0)), (a0(n0),a1(0),...an(0)),(a0(0),a1(1),a2(0),...an(0)),...(a0(0),a1(0),...,an(nn)).即先遍历a0,再遍历a1,a2,...,an. 2、opencv中矩阵的存储方式是行优先的,与matlab相反。 3、对于三维矩阵,在opencv中我常使用一个多通道的二维矩阵代替。如创建一个100*10*20的矩阵: Mat a(100,10,CV_32SC(20)); 也可以直接创建一个三维矩阵: int sz[]={100,10,20}; Mat a(sz,CV_32S); 4、对于遍历矩阵的操作,尽量使矩阵元素在内存中连续。我常使用下面的方法遍历矩阵: double *data=(double *)a.data; for(int i=0;i<a.rows;++i){ for(int j=0;j<a.cols;++j){ *(data++)=........ } } 5、矩阵的初始化 opencv新建一个矩阵后并不会自动初始化,如果需要初始化需要自行操作。opencv提供了setTo函数: //初始化一个32通道的矩阵,第32通道初始化为1,其他通道初始化为0 Mat a(100,100,CV_32SC(32)); Vec<int,32>val; val=0; val[31]=1; a.setTo(val); |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论