最近在做数字视频处理作业时,经常遇到需要对视频的帧数据进行挨个的处理。其中就涉及到了两个问题:
1、如何申请一个和图像帧数据同等大小的二维数组?
2、如何对二维数组进行函数操作,即参数传递问题。
首先,解决动态申请二维数组问题。在之前写的博客(http://blog.csdn.net/shawpan/article/details/8971845)中详细的讨论了如何用C语言动态申请数组。这里,介绍一下用C++如何创建。使用new申请内存,最后,使用delete函数释放内存。
int ** ga = new int*[row];
for(int i = 0; i < row ; i++)
ga[i] = new int[col];
for(i = 0; i < row; i++)delete []ga[i];delete []ga;
对于动态申请的二维数组,使用指针对其进行操作,在参数传递的过程中,由于传递的是指针,故在函数内部的操作,都会影响到数组本身。具体的例子如下:
#include<iostream>运行结果如下:
using namespace std;
void print(int row,int col,int **ga)
{
for(int i = 0;i < row ; i++)
{
for(int j = 0;j < col; j++)
{
cout<<ga[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
void set(int row,int col,int **p)
{
for(int i = 0;i < row ; i++)
{
for(int j = 0;j < col; j++)
{
p[i][j] = 5;
}
}
}
int main()
{
int row,col;
cout<<"input row"<<endl;
cin >>row;
cout<<"input col"<<endl;
cin >> col;
//动态申请二维数组
int ** ga = new int*[row];
for(int i = 0; i < row ; i++)
ga[i] = new int[col];
for(i = 0;i < row ; i++)
for(int j = 0;j < col; j++)
{
ga[i][j] = i+j;
}
print(row,col,ga);
set(row,col,ga);
print(row,col,ga);
//回收内存
for(i = 0; i < row; i++)
delete []ga[i];
delete []ga;
return 0;
}