C ++中的函数类似于numpy flatten

时间:2017-05-01 21:15:05

标签: c++ opencv numpy

C ++或opencv中是否有任何函数可以执行与numpy flatten()函数相同的操作?

我认为我的问题很模糊。我试图在C ++ opencv环境中使用K-means分段,这里有一个例子在python中给出http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_kmeans/py_kmeans_opencv/py_kmeans_opencv.html

var data = {}; for(var i = 0; i<10; i++) { data['key'+ i] = function (i) { alert(i); }.bind(null, i); }

我已经能够完成大部分操作,直到C ++中的这个扁平化的东西 标签的尺寸是921600 X 1,我也可以在C ++中获得。中心尺寸为4X3矩阵。我想这里的诀窍是让所有标签值都特定于中心值。所以最后“res”变成了921600 X 3。

所以我的问题是如何使用opencv在C ++中执行此操作?

由于

2 个答案:

答案 0 :(得分:1)

所以我已经想到了这一点,没有直接或1行解决方案(如果有让我知道哈哈)

res = center[label.flatten()] 

可以在C ++ opencv

中执行以下操作
for(int i = 0; i<labels.rows ; i++)
{
  if(labels.at<int>(i) == 0) { 
    res.push_back(centers.row(0));
  } else if(labels.at<int>(i) == 1) {
      res.push_back(centers.row(1)); 
  } else if(labels.at<int>(i) == 2) {
      res.push_back(centers.row(2)); 
  } else{
      res.push_back(centers.row(3));
  } 
}

谢谢。

答案 1 :(得分:0)

旧问题,但以防万一有人到这里来,正确的答案是 Mat 类的 reshape 方法。查看OpenCV文档以获取更多信息: https://docs.opencv.org/4.3.0/d3/d63/classcv_1_1Mat.html#a4eb96e3251417fa88b78e2abd6cfd7d8

以下是执行展平的示例函数:

cv::Mat Flatten(const cv::Mat& mat)
{
    return mat.reshape(1, 1);
}