我有一些C ++ openCV代码。
像
这样的东西void foo(...., Mat mx){
...
x_d = mx.at<float>(x,y);
...
}
我尝试在C中重写这部分。我读了docs,他们说数据是CvMap结构中的联合。但是在尝试获取它时我得到了不同的错误消息。他们在这里:
void foo(...., CvMat *mx){
...
x_d = *(((float*)mx->data) + y * width + x); // cannot convert to a pointer type
x_d = *(mx->data + y * width + x); // invalid operands to binary + (have 'union <anonymous>' and 'int')
...
}
所以我有两个问题。 我如何从这个代码的结构中得到浮点数? 这是我需要的数据吗?
答案 0 :(得分:2)
您可以使用Get?D个功能,或CV_MAT_ELEM宏。
请参阅以下示例:
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
CvMat* m = cvCreateMat(2, 3, CV_32FC1);
cvSet(m, cvScalar(1.0f));
cvSet2D(m, 0, 1, cvScalar(2.0f));
// m
// 1.0 2.0 1.0
// 1.0 1.0 1.0
// Using cvGet2d
CvScalar v00 = cvGet2D(m, 0, 0);
float f00 = v00.val[0];
// f00 = 1.0
CvScalar v01 = cvGet2D(m, 0, 1);
float f01 = v01.val[0];
// f00 = 2.0
// Using CV_MAT_ELEM
float g00 = CV_MAT_ELEM(*m, float, 0, 0);
// g00 = 1.0
float g01 = CV_MAT_ELEM(*m, float, 0, 1);
// g01 = 2.0
return 0;
}
答案 1 :(得分:0)
第一条指令似乎几乎是正确的,但错误是说你尝试将结果视为指针。显然它不是指针,而是数字。可能漂浮。试试这个:
x_d = (((float*)mx->data) + y * width + x);