Opencv代码小结之Mat三维创建和Mat逐点逐行赋值

原创 2015年07月10日 17:23:42

在用opencv做三维重构时,新学习了Mat矩阵,对于Mat的创建赋值有了一定了解,代码简单小结如下:

1、创建零/一矩阵

	Mat mzeros = Mat::zeros(1, ix.rows, CV_32F);
	Mat mones = Mat::ones(1, ix.rows, CV_32F);

2、创建空矩阵

其中:Mat_<uchr> = CV_8U ,Mat_<char>=CV_8S , Mat_<int> = CV_32S ,Mat_<float> =CV_32F ,Mat_<double> = CV_64F

	Mat ix,iy;
<span style="white-space:pre">	</span>ix.create(300, 9, CV_32F);
	iy.create(300, 9, CV_32F);
<span style="white-space:pre">	</span>Mat tempModel(rows ,cols<span style="font-family: Arial, Helvetica, sans-serif;">, CV_32F);</span>

3、创建三维矩阵

	int sz[] = { 3, 4, T };
	Mat rt = Mat(3, sz, CV_32F, Scalar::all(0));

4、Mat访问指定元素

<span style="white-space:pre">	</span>ix.at<float>(n, k);

5、深拷贝

<span style="white-space:pre">	</span>out_ix = ix.col(1).clone();//拷贝第一列,其中out_ix.cols = 1, out_ix.rows = ix.rows

<span style="white-space:pre">	</span>out_ix1 = ix.clone();

<span style="white-space:pre">	</span>ix.copyTo(out_ix2); //把ix的内容拷贝到out_ix2


6、Mat转置

<span style="white-space:pre">	</span>B = A.t();

7、逐行拼接

其中:tempModel是最后需要组合的Mat

	Mat tempModel(4, ix.rows, CV_32F);
<span style="white-space:pre">	</span>Mat submat = tempModel.rowRange(0, 1);
	mix.copyTo(submat);
	submat = tempModel.rowRange(1, 2);
	miy.copyTo(submat);
	submat = tempModel.rowRange(2, 3);
	mzeros.copyTo(submat);
	submat = tempModel.rowRange(3, 4);
	mones.copyTo(submat);

存在的问题如下:

1、在进行逐行赋值时,运用代码如下:

//1按行 无语法错,但不知道逻辑对不对...
<span style="white-space:pre">	</span>out_iy.row(n2) = iy.row(n).clone(); //不正确
//2逐个
	int k = ix.cols;
	while (k--){//此方法赋值还是不正确!out还是零!
		out_ix.at<float>(n2, k) = ix.at<float>(n, k);
			}

因为以上代码是在一个大的while里面所有每次while输出一行copy的结果,用cout输出out_ix的值,但是out的值并没有变化!还用了5的按行拷贝方式,还是拷贝不成功!但是5在之前验证是成功了的!完全搞不清楚是什么意思!

折腾了一个多小时都没正确,干脆跳过这一段写下面的,结果在下面验证总体out_ix时,结果却是正确的!copy成功了!完全不知道为什么啊啊啊 !

这个问题先搁置在这里!找时间要把所有的原理深入学习一下~

opencv中Mat和数组赋值的几种方法

用opencv还不太熟练时,经常会在一些小地方出错,特别是Mat的赋值。现在总结一下我用到的几种方法。 Mat a = (Mat_(2,2)...
  • wearevolunteer
  • wearevolunteer
  • 2014年03月18日 14:29
  • 10555

初始化Mat的几种方法

1. 调用Mat的构造函数或者create函数,如:   // make a 7x7 complex matrix filled with 1+3j. Mat M(7,7,CV_32FC2,Sca...
  • lichengyu
  • lichengyu
  • 2014年08月15日 21:23
  • 15881

opencv—Mat按行赋值

Mat中row()函数为创建一个指定行数的矩阵头并返回,新矩阵和原始矩阵共享一份基础数据。 因此在这段代码中,第八行代码的意思就是把C矩阵的第三行给dsttemp,即dsttemp指向C矩阵的第三行的...
  • Wonder233
  • Wonder233
  • 2016年10月12日 20:30
  • 4112

opencv中Mat的赋值和访问(一)

opencv中Mat的赋值和访问(一)          在OpenCV中有三种方式访问矩阵中的数据元素:容易的方式,困难的方式,以及正确的方式。今天主要讲容易方式:     ...
  • king16304
  • king16304
  • 2016年09月13日 20:44
  • 1191

opencv Mat之间赋值(复制)

opencv Mat之间赋值 浅拷贝 //注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用) Mat a; Mat b = a...
  • yueguanyun
  • yueguanyun
  • 2016年03月03日 10:44
  • 6030

OpenCV Mat数据的按行(列)和多行(列)赋值

赋值的不正确情况在使用opencv的过程中,希望多行或者多列进行赋值,我之前的代码是这样的 Mat c = Mat::zeros(3, 5, CV_32F); Mat a = Mat::...
  • u014686356
  • u014686356
  • 2017年03月25日 16:36
  • 3644

opencv读取txt文件,并赋值为Mat矩阵

目的:opencv读取txt文件,并将txt文件赋值给Mat矩阵 方法:利用fstream类来完成 关于fstream类请参考下面这篇文章: http://blog.csdn.net/smsto...
  • weixin_38285131
  • weixin_38285131
  • 2017年08月10日 13:02
  • 299

【OpenCV3图像处理】Mat中元素的获取与赋值 ( 对比.at<>()函数 和 .ptr<>()函数)

Mat中像素的获取与赋值计算机视觉中,图像的读取是图像处理的基础,图像就是一系列像素值,OpenCV使用数据结构cv::Mat来存储图像。cv::Mat是一个矩阵类,矩阵中每一个元素都代表一个像素,对...
  • u011574296
  • u011574296
  • 2017年04月12日 10:08
  • 2103

【OpenCV】访问Mat中每个像素的值(新)

在《OpenCV 2 Computer Vision Application Programming Cookbook》看到的例子,非常不错,算是对之前的文章的回顾和补充。Color Reduce还是...
  • xiaowei_cqu
  • xiaowei_cqu
  • 2014年02月24日 21:02
  • 104992

OpenCV Mat数据类型像素操作

转自:http://blog.csdn.net/skeeee/article/details/13297457  OpenCV图像像素操作及效率分析         在计算机视...
  • jyl1999xxxx
  • jyl1999xxxx
  • 2016年11月07日 19:50
  • 4769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Opencv代码小结之Mat三维创建和Mat逐点逐行赋值
举报原因:
原因补充:

(最多只允许输入30个字)