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 ++中执行此操作?
由于
答案 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);
}