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
如何在不使用模板的情况下直接访问浮点数据(.at
,.ptr
)
答案 0 :(得分:0)
你必须先将数据(类型unsigned char * pointer)指向float指针:
float data = ((float*)matrixm.data)[j+i*matrixm.cols];
仅当图像是连续的时才有效。或者在之后施放:
float data = (float)(matrix.data[i*matrixm.step[0]+j*matrix.elemSize()]])
这也适用于conguos图像。
对我而言,它看起来不像XY问题。看起来你是OpenCV世界的新手,你想了解它是如何工作的。
答案 1 :(得分:0)
所以你想要at<>
的功能而不使用它?
以下是at<>
的有趣src行:
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];
但是,与调用at<>
答案 2 :(得分:0)
ptr应该是最好的方法(具有良好的性能); OpenCV不保证Mat会在ram上保持连续范围,对于足够大的图像,它可以按行划分,并保存在不同的位置。因此,您需要使用ptr来获取一行的位置。