2012-01-13 81 views
-2

我的代码出现问题。我的代码片段如下尝试在OpenCV中设置矩阵的值时出现指针错误

提到的这些都是我读

116 117 77 0.170833333333333 0.341880341880342 

FILE* fid= fopen("treewall","r"); 

      while (fscanf(fid,"%f",&a)==1) 
      { 
        printf("%f\n",a); 
        trainsamplecount=trainsamplecount+1; 
      } 
      cout<<trainsamplecount<<endl; 
      rewind(fid); 
      float td[2000][7]; 
      int numoftestpoints; 
      CvMat* traindata=cvCreateMat(trainsamplecount,6,CV_32FC1); 
      CvMat* trainclasses=cvCreateMat(trainsamplecount,1,CV_32FC1); 
      CvMat* samplewts=cvCreateMat(trainsamplecount,1,CV_32FC1); 
      CvMat* neurallayers=cvCreateMat(4,1,CV_32SC1); 
      CvMat traindata1,trainclasses1,neurallayers1,samplewts1; 

      cvGetRows(traindata,&traindata1,0,trainsamplecount); 
      cvGetRows(trainclasses,&trainclasses1,0,trainsamplecount); 
      cvGetRows(samplewts,&samplewts1,0,trainsamplecount); 
      cvGetRows(neurallayers,&neurallayers1,0,4); 

      cvSet1D(&neurallayers1, 0, cvScalar(6)); 
      cvSet1D(&neurallayers1,1,cvScalar(3)); 
      cvSet1D(&neurallayers1,2,cvScalar(3)); 
      cvSet1D(&neurallayers1, 3, cvScalar(1)); 

      int i=0,j=0; 

      if(fid) 
      { 
      for(int i=0;i<trainsamplecount;i++) 
       fscanf(fid,"%f %f %f %f %f %f %f ",&td[i][0],&td[i][1],&td[i][2],&td[i][3],&td[i][4],&td[i][5],&td[i][6]); 



      for (i=0;i<trainsamplecount;i++) 
      { 
       cout<<i<<endl; 
       cvSetReal2D(traindata,i,0,(float)td[i][0]); 
       cvSetReal2D(traindata,i,1,(float)td[i][1]); 
       cvSetReal2D(traindata,i,2,(float)td[i][2]); 
       cvSetReal2D(traindata,i,3,(float)td[i][3]); 
       cvSetReal2D(traindata,i,4,(float)td[i][4]); 
       cvSetReal2D(traindata,i,5,(float)td[i][5]); 
       cvSet1D(&trainclasses1,i,cvRealScalar(1)); 
       cvSet1D(&samplewts1,i,cvRealScalar(1)); 

      } 
      } 

它在cvSetReal2D给出了一个错误的一些样本值。 这提供了以下错误:

OpenCV Error: Bad argument (unrecognized or unsupported array type) in cvPtr2D, file /usr/local/src/OpenCV-2.3.0/modules/core/src/array.cpp, line 1830 
terminate called after throwing an instance of 'cv::Exception' 

我在Ubuntu工作日食在OpenCV中。 请帮我解决这个问题。

+0

参数敌人cvSetReal2D需要的第一个参数是一个指针。 – SB26 2012-01-13 01:16:49

+0

你的代码看起来并不完整。例如,有一个for循环不是全部。 – 2012-01-13 01:17:07

+0

@ SB26:对不起,混合了'data'和'data1'。 – 2012-01-13 01:22:24

回答

0

下面是您正在尝试做的简化示例。这种使用OpenCV的2.3.1正常工作在我的机器上:

#define SAMPLE_COUNT 5 

int main(int argc, char** argv) 
{ 
    CvMat* data = cvCreateMat(SAMPLE_COUNT, 6, CV_32FC1); 

    for (int i = 0; i < SAMPLE_COUNT; i++) 
    { 
     cout << "Adding i = " << i << endl; 
     cvSetReal2D(data, i, 0, (float)i); 
     cvSetReal2D(data, i, 1, (float)i); 
     cvSetReal2D(data, i, 2, (float)i); 
     cvSetReal2D(data, i, 3, (float)i); 
     cvSetReal2D(data, i, 4, (float)i); 
     cvSetReal2D(data, i, 5, (float)i); 
    } 


    return 0; 
} 

但是,我不知道你正在努力实现与这些线是什么:

cvGetRows(data, &data1, 0, samplecount); 
cvGetRows(classes, &classes1, 0, samplecount); 

你抓住了整个矩阵一个“子矩阵”,所以data1相当于data;同样,classes1相当于classes。那么,为什么不直接使用dataclasses指针呢?需要

更多信息彻底解决您的问题,我认为......

+0

请问你能解释一下我为什么会收到这个错误 – SB26 2012-01-13 18:49:35

+0

你能发布更多的代码吗?这对确定错误会有很大的帮助。 – mevatron 2012-01-13 19:03:03

+0

hey mevatron我已经发布了code.Please看看它 – SB26 2012-01-13 19:40:46

相关问题