如何在OpenCV中声明向量?

ner*_*ner 3 c++ qt opencv vector

您如何在OpenCV中编写向量?包含这样的3个值v = [p1,p2,p3]?这是我尝试的:

int dim [1] = {3};
Mat v(1,dim,CV_32F, Scalar(p1,p2,p3));
Run Code Online (Sandbox Code Playgroud)

但是当我在Qt中调试时,我在本地和表达式窗口中看到该向量v确实具有1列和3行,但也具有2个dim。我想知道这是否归因Mat于声明中的类型。我可以用哪种类型替换它以获得3个值的简单向量?

Mik*_*iki 5

我可以使用哪种类型来获取3个值的简单向量?我想对此向量做一些操作,例如使用规范并更改其元素。

您可以使用cv :: Vec类型。

假设您正在处理double值(其他类型也一样),您可以:

// Create a vector
Vec3d v;

// Assign values / Change elements
v[0] = 1.1;
v[1] = 2.2;
v[2] = 3.3;

// Or initialize in the constructor directly 
Vec3d u(1.1, 2.2, 3.3);

// Read values
double d0 = v[0];

// Compute the norm, using cv::norm 
double norm_L2 = norm(v, NORM_L2); // or norm(v);
double norm_L1 = norm(v, NORM_L1);
Run Code Online (Sandbox Code Playgroud)

对于:

  • double 类型使用 Vec3d
  • float 类型使用 Vec3f
  • int 类型使用 Vec3i
  • short 类型使用 Vec3s
  • ushort 类型使用 Vec3w
  • uchar 类型使用 Vec3b