OpenCV笔记4.2

OpenCV笔记4.2,第1张

动态数组Vector
静态数组太浪费内存不容易判断,想了一下,需要用动态数组,查了一下函数,记录一下,怕几天后自己就忘记了。


更新写在前边!!一个坑!!
vector中size()返回类型是:size_type,Member type size_type is an unsigned integral type,是无符号整数
所以在直接使用A[size() - 1]时存在隐患,容易引起越界!!!!!!
故使用之前先预定义一下!以下四种方式均可。


int n = A.size() - 1;
int(A.size() - 1)
int(A.size()) - 1
static_cast<int>(A.size())

1、动态数组vector,头文件:#include
2、命名空间using namespace std;
3、声明

vector <int> A;//int类型的动态数组A
vector <char> B;//char类型动态数组B
vector <node> C;//结构体node类型动态数组C(node是结构体名)

4、构造函数,声明时初始化

vector <int> A(a,b);//声明A,在A中初始化,a个b
vector <int> B(a); //声明B,在B中初始化a个0

//声明C,用A的全部内容为C初始化,C = A,两个数组一摸一样
vector <int> C(A);

//声明D,截取A的下标A[A.begin()+l]到A[A.begin()+m,A.end()-n]的内容为C初始化
vector <int> D(A.begin()+m,A.end()-n);

5、析构函数

vector <B> A;//声明B种数据类型的A
A.~vector<B>(); //析构函数

6、赋值

vector <int> A;
A.push_back(a);//在A的末尾插入a

//在下标k的前面插入数a,k之后的数依次后退一位下标从0开始
A.insert(A.begin()+k,a);

A.insert(A.begin()+k,p,a);//在下标k前面插入p个a

7、删除

vector <int> v;
...
v.pop_back()//删除最后一个元素
v.erase(v.begin()+k);//删除下标为k的数,返回下一个位置的下标
v.erase(v.begin()+l,v.end()-r);//删除下标[l,v.end()-r)的元素

7、常用函数

以vector <int> v为例:

v[i]或v.at(i)//返回v[i]的值
v.size();//返回v数组元素总个数
v.front();//返回v数组第一个元素的值
v.back();//返回v数组最后一个元素的值
v.clear();//清空v数组
v.begin();//返回v数组第一个数的地址
v.end();//返回v数组最后一个数之后的地址
v.empty();//判断v数组是否为空,是空则返回1(true),非空(有元素)则返回0(false)
v.swap(v1);//v1是另一个动态数组,将v和v1元素互换
swap(v,v1);//同上swap

Mat矩阵拼接

hconcat(A, c, Ac);//A和c左右拼接得到Ac
vconcat(A, cc, Acc);//A和cc上下拼接得到Acc

具体使用:
上面对A有定义,A是五行四列矩阵。


Mat c = Mat::zeros(5, 1, CV_64F);
	Mat cc = Mat::zeros(1, 4, CV_64F);
	Mat Ac,Acc;
	hconcat(A, c, Ac);
	vconcat(A, cc, Acc);
	cout <<"左右拼接:"<< Ac<<endl;
	cout <<"上下拼接:" << Acc << endl;


确认Mat矩阵内容是否为空,有没有数据

Mat A;
if(A.empty())//判断是否为空
	cout<<"yes,empty"<<endl;
if(!A.data)//判断有无数据
	cout<<"yes,not have data"<<endl;

今日进度

今日进度暂存,明天需要做的:写完这个程序,基本函数已经写完,明天写遍历、调用和可视化,今日懒散,写的太少。


//A 
	int idex = Get_Matrow("0000.txt");//获取要读的编号
	Mat date = Mat::zeros(idex, 5, CV_64F);//建立模具承载读的文件
	Mat A = Mat::zeros(idex, 4, CV_64F);//建立模具承载需要的数据
	ReadFile("0000.txt", date);//读文件放在模具
	Translate(date, A);//转换为需要的数据放在模具

	//B
	int idex2 = Get_Matrow("0001.txt");
	Mat date2 = Mat::zeros(idex2, 5, CV_64F);
	Mat B = Mat::zeros(idex2, 4, CV_64F);
	ReadFile("0001.txt", date2);
	Translate(date2, B);

	//countA
	Mat countA;
	Mat a = Mat::zeros(A.rows, 1, CV_64F);
	hconcat(A, a, countA);
	for (int i = 0; i < countA.rows; i++)
		countA.at<double>(i, countA.cols - 1) = i + 1;


	//countB
	Mat countB;
	Mat aa = Mat::zeros(A.rows, 1, CV_64F);
	hconcat(B, aa, countB);


	OneImg(countA, A, B, countB);
	cout << "countB = "<< countB << endl;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/563900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存