vector中存取数据的有关问题

vector中存取数据的问题
本帖最后由 fxmzssy 于 2013-03-07 15:57:57 编辑
本人用opencv1.0实现一个视频帧读取的功能。定义了一个vector来储存视频中的帧,并将帧中的点(200,300)写到文档中,但是运行了后发现第一次输出和第二次输出的值不一样,第一次输出时正确的结果,第二次输出时全部是最后一个值。代码如下
	const int FrameNum = 5;//背景提取所需帧数
vector<CvMat*> v_frame;//存储每帧图像
vector<int> bgVal;//存储背景中各像素点灰度值数组
uchar backval = 0;//背景灰度值
if(!capture)
{
MessageBox("加载视频不成功");
}
else
{
int count=0;
int frameH=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);//视频帧高度
int frameW=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH);//视频帧宽度
int fps=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);            //视频帧率
int numFrames=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);//视频帧数
CvMat* framemat=cvCreateMat(frameH,frameW,CV_8UC1); //当前帧矩阵
CvMat* bgmat=cvCreateMat(frameH,frameW,CV_8UC1);    //背景帧矩阵
int num=0;//记录帧数
ofstream fout;
fout.open("F:\\deteDlg\\abcw.txt");
fout<<"(200,300):"<<"\n";
while (true)
{
frame=cvQueryFrame(capture);
if(!frame)
{
MessageBox("视频播放完毕");
break;
}
DrawPicToHDC(frame,IDC_CF);
if (num%3==0)
{
cvCvtColor(frame,framemat,CV_RGB2GRAY);
v_frame.push_back(framemat);
      fout<<cvRound(cvGet2D(v_frame.at(num/3),200,300).val[0])<<",";//第一次输出
}
num++;
if (num==FrameNum*3)
{
break;
}
}
fout<<"\n";
fout<<"1.v_frame中点(200,300):\n";
for (vector<CvMat *>::size_type vtest=0;vtest<v_frame.size();vtest++)
{
fout<<cvRound(cvGet2D(v_frame.at(vtest),200,300).val[0])<<",";//第二次输出
}
fout<<"\n";



结果如下:
(200,300):
0,109,107,107,105,
1.v_frame中点(200,300):
105,105,105,105,105,

各位大侠帮帮小弟,初学,不知何故
vector opencv 存储

------解决方案--------------------
if (num%3==0)
            {
CvMat* framemat=cvCreateMat(frameH,frameW,CV_8UC1); //把这句移到这里来
                cvCvtColor(frame,framemat,CV_RGB2GRAY);
                v_frame.push_back(framemat);
                 fout<<cvRound(cvGet2D(v_frame.at(num/3),200,300).val[0])<<",";//第一次输出
            }



不过最后你得把v_frame中所有的CvMat*都release掉