C++ 如何从opencv Mat访问浮点值(除了.at和.ptr) float data=matrixm.ptr(i)[j];-工作 float data=matrixm.at(i,j);-工作 float data=matrixm.data[i*matrixm.step+j*matrix.elemSize()]未给出正确的输出
如何在不使用模板的情况下直接访问浮点数据(C++ 如何从opencv Mat访问浮点值(除了.at和.ptr) float data=matrixm.ptr(i)[j];-工作 float data=matrixm.at(i,j);-工作 float data=matrixm.data[i*matrixm.step+j*matrix.elemSize()]未给出正确的输出,c++,opencv,C++,Opencv,如何在不使用模板的情况下直接访问浮点数据(.at,.ptr)您必须首先将数据(键入unsigned char*pointer)指针强制转换为浮点指针: float data = matrixm.ptr<float>(i)[j]; - working float data = matrixm.at<float>(i,j); - working float data = matrixm.data[i*matrixm.step+j*matrix.elemSize()] - is
.at
,.ptr
)您必须首先将数据(键入unsigned char*pointer)指针强制转换为浮点指针:
float data = matrixm.ptr<float>(i)[j]; - working
float data = matrixm.at<float>(i,j); - working
float data = matrixm.data[i*matrixm.step+j*matrix.elemSize()] - is not giving correct output
这仅在图像连续时有效。或在以下情况下投下:
float data = ((float*)matrixm.data)[j+i*matrixm.cols];
这也适用于conguos图像
对我来说,这看起来不像是XY问题。看起来你是OpenCV的新手,你不想了解它是如何工作的。那么你想在不使用它的情况下使用
at
的功能吗?
下面是在上的的有趣的src行:
但是这比在处调用
有什么优势呢?ptr应该是最好的方式(性能良好);OpenCV不能保证Mat在ram上是一个连续的范围,对于一些足够大的图像,它可以被行分割,并保存在不同的位置。这就是为什么需要使用ptr来获取一行的位置。这听起来像是一个错误。你想解决什么问题?为什么要避免at
和ptr
。我不明白为什么ptr
会有问题,特别是如果您知道图像是连续的(在这种情况下,您只调用它一次)。
float data = (float)(matrix.data[i*matrixm.step[0]+j*matrix.elemSize()]])
template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)
...
return ((_Tp*)(data + step.p[0]*i0))[i1];
float data = ((float*)(matrixm.data + matrixm.step.p[0]*i))[j];