C++ 尝试在OpenCV中设置矩阵值时出现指针错误
我的代码有问题。下面提到了我的代码片段 这些是我读到的一些示例值C++ 尝试在OpenCV中设置矩阵值时出现指针错误,c++,eclipse,pointers,ubuntu,opencv,C++,Eclipse,Pointers,Ubuntu,Opencv,我的代码有问题。下面提到了我的代码片段 这些是我读到的一些示例值 116 117 77 0.170833333333333 0.341880341880342 FILE* fid= fopen("treewall","r"); while (fscanf(fid,"%f",&a)==1) { printf("%f\n",a); trainsamplecou
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));
}
}
我在Ubuntu中使用OpenCV中的eclipse。
请帮我解决这个问题。下面是您尝试做的一个简化示例。这在使用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;
}
您将整个矩阵作为“子矩阵”进行抓取,因此data1
相当于data
;同样地,classes1
相当于classes
。那么,为什么不直接使用数据
和类
指针呢
需要更多信息才能完全解决您的问题,我认为…cvSetReal2D的参数需要第一个参数作为指针。您的代码看起来并不完整。例如,有一个for循环并不完全存在。@SB26:对不起,混淆了
数据
和数据1
@carl:对不起,这是一个打字错误。现在修复了。请您解释一下我出现此错误的原因。您可以发布更多的代码吗?这对确定错误非常有帮助。
#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);