尝试在OpenCV中设置矩阵值时发生指针错误
Pointer error when trying to set the value of a matrix in OpenCV
我的代码有问题。下面提到了我的代码片段
这些是我读取的一些样本值
116 117 77 0.170833333333333 0.341880341880342
FILE* fid= fopen("treewall","r");
while (fscanf(fid,"%f",&a)==1)
{
printf("%fn",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中的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;
}
然而,我不确定你想用这些线路实现什么:
cvGetRows(data, &data1, 0, samplecount);
cvGetRows(classes, &classes1, 0, samplecount);
你正在把整个矩阵作为一个子矩阵,所以data1
等价于data
;同样地,classes1
等价于classes
。那么,为什么不直接使用data
和classes
指针呢?
需要更多的信息来完全解决你的问题,我认为。。。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 运行几次后合并段错误C++(指针算术)
- LinkedList实现C 错误指针间接
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- Xcode 错误:指针和双精度之间的比较
- 未分配正在释放的本机node.js插件错误指针
- 错误指针:解析令牌时无法计算表达式
- C++-va_list错误指针
- 为什么我收到错误" (指针的名称)不是模板)?
- mmap 错误:分段错误/指针无效错误
- C++ Winsock2 错误指针断点触发
- C++ 代码中的错误指针错误
- 数组错误指针上的增量运算符
- MAKEINTRESOURCE 返回资源 ID 的错误指针
- 分段错误C++指针
- 段错误指针
- C++ 错误 :: 指针数组的EXC_BAD_ACCESS
- 通过模糊 mat 从 std::vector: <int>cv::Exception 中获取错误指针
- 正在解决编译器错误:指针可能未初始化