2012-01-13 5 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' 

내가 OpenCV의에서 일식에 우분투하고 있어요 : 이 다음과 같은 오류를 제공합니다. 문제 해결을 도와주세요.

+0

인수의 적 cvSetReal2D 포인터로 첫 번째 인수를 필요를 해결하기 위해 필요하다. – SB26

+0

코드가 실제로 완벽하게 보이지 않습니다. 예를 들어 for 루프가 있습니다. –

+0

@ SB26 : 죄송합니다. '데이터'와 '데이터 1'이 섞여 있습니다. –

답변

0

다음은 수행하려는 간단한 샘플입니다.

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

당신은 전체 매트릭스를 잡아됩니다 : 당신이 선으로 달성하려는 모르겠어요,하지만

#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; 
} 

:이 OpenCV의 2.3.1를 사용하여 내 컴퓨터에서 제대로 작동 "서브 매트릭스"이므로 data1data과 같습니다. 마찬가지로 classes1classes과 같습니다. 그렇다면 dataclasses 포인터를 직접 사용하지 않는 이유는 무엇입니까?

자세한 정보는 완전히 내가 생각하는 문제 ...

+0

이 오류가 발생하는 이유를 설명해주십시오. – SB26

+0

코드를 게시하여 오류를 판단하는 데 큰 도움이 될 수 있습니까? – mevatron

+0

안녕하세요 mevatron 코드를 게시했습니다. 한번보세요. – SB26

관련 문제