为什么当我尝试访问 CvMat 数据结构成员的第一个元素时,我会得到这个 ^@
Why do i get this ^@ when i attempt to access the first element of a CvMat data struct member
当我运行这段代码时
double a[]={1.0,2.0,3.0,4.0};
CvMat M=cvMat(8,8,CV_8UC1, a);
cout<<"M.data.ptr="<< M.data.ptr[0]<<endl;
要访问矩阵的第一个元素 1.0,我得到了输出M.data.ptr=^@
奇怪的是,我尝试将cout输出复制到其中?而且^@
不会复制..粘贴时我只得到了M.data.ptr
...我绑定了其他变体,如 M.data.ptr[0]
和 M.data.ptr
,但分别得到了这 2 个的正常错误和空输出。我将如何通过取消引用数据结构成员而不使用函数 i/e cvGet2D 来访问 1.0...以防万一它的 emacs 正在这样做,我认为 id 报告 im 在 Ubuntu Saucy 上使用 Emacs......
您正在尝试使用 double
类型的元素初始化矩阵,但创建 CV_8UC1
类型的矩阵。此外,直接访问指针会将原始指针(类型 unsigned char
(返回到基础数据。您必须将该指针解释为double*
才能获取实际值。您正在尝试执行的操作实际上可能如下所示:
double a[]={1.0,2.0,3.0,4.0};
CvMat M = cvMat(8,8,CV_64FC1, a);
double* data_ptr_64f = (double*)(M.data.ptr);
cout<<"M.data.ptr="<< data_ptr_64f[0]<<endl;
您没有读取正确的字节数。data
字段的大小为 8 位 (uchar(。您应该投射指针:
cout << *((double *)M.data.ptr) << endl;
或使用OpenCV友好为您提供的getters:
cout << M.at<double>(0, 0) << endl;
/* yet another possibility */
cout << *M.ptr<double>(0) << endl;
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 将顶部堆栈元素传输到第二个堆栈的第一个
- 获取不等于特定值的向量的第一个N元素
- 如何将std ::映射的第一个N元素复制到另一个地图
- 如何在C中获取char阵列的第一个X元素?提升效果是否有改进的方法