cv::Mat 基本用法之初始化
2017-07-21 16:18
393 查看
Mat H(100, 100, CV_64F);
for(int i = 0; i < H.rows; i++)
for(int j = 0; j < H.cols; j++)
H.at<double>(i,j)=1./(i+j+1);
通过这个例子,我们尝试来给Mat类型初始化。
第一种改进:(直接由以上例子仿制而来)
//用一个常数来初始化矩阵
void InitMat(Mat& m,float t)
{
for(int i=0;i<m.rows;i++)
for(int j=0;j<m.cols;j++)
m.at<float>(i,j)=t;
}
主程序:
int _tmain(int argc, _TCHAR* argv[])
{
//Mat矩阵中的初始化,可以利用Mat::at()来完成
Mat M0(3,3,CV_32F);
InitMat(M0,3);
}
第二种改进:
//用一个一维数组来初始化矩阵
void InitMat(Mat& m,float* num)
{
for(int i=0;i<m.rows;i++)
for(int j=0;j<m.cols;j++)
m.at<float>(i,j)=*(num+i*m.rows+j);
}
主程序:
int _tmain(int argc, _TCHAR* argv[])
{
//Mat矩阵中的初始化,可以利用Mat::at()来完成
float m0[]={ 1,2,3,
6,5,4,
7,8,9 };
Mat M0(3,3,CV_32F);
InitMat(M0,m0);
}
第三种改进:
//希望利用二维数组来初始化
void InitMat(Mat& m,float(*p)[3])
{
for(int i=0;i<m.rows;i++)
for(int j=0;j<m.cols;j++)
m.at<float>(i,j)=*(*(p+i)+j);
}
主程序:
int _tmain(int argc, _TCHAR* argv[])
{
//Mat矩阵中的初始化,可以利用Mat::at()来完成
float m[][3]={ 1,2,3,
6,5,4,
7,8,9 };
Mat M0(3,3,CV_32F);
InitMat(M0,m);
}
然而,注意在传递二维数组的时候,第三种方法的局限性在于必须要知道每一维度的元素个数,其实可以将二维数组,例如a[2][3]的数组名称a直接转换成一个float指针传递进去,当成一位数组使用。即,
主程序:
int _tmain(int argc, _TCHAR* argv[])
{
//Mat矩阵中的初始化,可以利用Mat::at()来完成
float m[][3]={ 1,2,3,
6,5,4,
7,8,9 };
Mat M0(3,3,CV_32F);
InitMat(M0,(float*)m);
}
相关文章推荐
- matplotlib的基本用法(六)——设置坐标轴label
- opencv中mat的用法_基本篇
- matplotlib的基本用法(十四)——figure图的嵌套
- matplotlib的基本用法(三)——调整坐标轴
- matplotlib的基本用法(十一)——绘制3D图
- matplotlib基本用法-【老鱼学matplotlib】
- matplotlib的基本用法(十六)——创建动画
- 【OpenCV3】cv::Mat的定义与初始化
- matplotlib的基本用法(九)——绘制等高线图
- matplotlib的基本用法(二)——设置坐标轴
- matplotlib的基本用法(四)——设置legend图例
- 7 -- Spring的基本用法 -- 8... 抽象Bean与子Bean;Bean继承与Java继承的区别;容器中的工厂Bean;获得Bean本身的id;强制初始化Bean
- CV_MAT_ELEM——获取矩阵元素和初始化矩阵
- CV_MAT_ELEM——获取矩阵元素和初始化矩阵
- Mat 的一些基本的初始化
- matplotlib的基本用法(十二)——subplot绘制多图
- matplotlib的基本用法(五)——添加annotation
- matplotlib的基本用法(十七)——保存figure
- OpenCv cv::Mat用法
- matplotlib的基本用法(七)——绘制散点图