Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在kmeans之后显示群集图像?_C++_Opencv_Type Conversion_K Means - Fatal编程技术网

C++ 如何在kmeans之后显示群集图像?

C++ 如何在kmeans之后显示群集图像?,c++,opencv,type-conversion,k-means,C++,Opencv,Type Conversion,K Means,我想使用一个数组作为k均值算法的输入,该数组具有x和y方向的位移值,是Lucas Kanade光流估计的结果。代码如下: 编辑: int number_of_features=150; // Lucas Kanade optical flow cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_features,frame2_features,number_of_features,optical_flow_wi

我想使用一个数组作为k均值算法的输入,该数组具有x和y方向的位移值,是Lucas Kanade光流估计的结果。代码如下:

编辑:

int number_of_features=150;
// Lucas Kanade optical flow 
cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_features,frame2_features,number_of_features,optical_flow_window, 5,optical_flow_found_feature, optical_flow_feature_error,optical_flow_termination_criteria, 0 );

float Dx[150],Dy[150]; // displacement matrices
float  Dis[150][2]; // total displacement matrix

int K=2; // clusters selected
Mat bestLabels, centers;

for(int i = 0; i < number_of_features; i++)
{
CvPoint p,q;
p.x = (int) frame1_features[i].x;
p.y = (int) frame1_features[i].y;
q.x = (int) frame2_features[i].x;
q.y = (int) frame2_features[i].y;

//displacements
Dx[i]=p.x-q.x;
Dy[i]=p.y-q.y;

Dis[i][0] = Dx[i];
Dis[i][1] = Dy[i];

}


// k means algorithm


// Creating Mat for Input data
cv::Mat flt_Dis(150, 2, CV_32F, Dis);

cv::kmeans(flt_Dis, K, bestLabels,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),3, KMEANS_PP_CENTERS, centers);
int number_of_features=150;
//卢卡斯-卡纳德光流
cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_特征,frame2_特征,数量_特征,光流窗口,5,光流发现_特征,光流特征错误,光流终止_标准,0);
浮点数Dx[150],Dy[150];//位移矩阵
浮点数[150][2];//总位移矩阵
int K=2;//选定的群集
垫子、标签、中心;
对于(int i=0;i<特征的数量;i++)
{
cvp点,q;
p、 x=(int)frame1_特征[i].x;
p、 y=(int)frame1_特征[i].y;
q、 x=(int)frame2_特征[i].x;
q、 y=(int)frame2_特征[i].y;
//位移
Dx[i]=p.x-q.x;
Dy[i]=p.y-q.y;
Dis[i][0]=Dx[i];
Dis[i][1]=Dy[i];
}
//k均值算法
//为输入数据创建Mat
cv::Mat flt_Dis(150,2,cv_32F,Dis);
cv::kmeans(flt_Dis,K,最佳标签,术语标准(cv_TERMCRIT_EPS+cv_TERMCRIT_ITER,10,1.0),3,kmeans_PP_中心,中心);
我已经解决了以前的问题,现在我想显示集群图像。我猜bestLabels存储每个元素的索引,例如,如果它被分类为第0类或第1类。我说的对吗??如何显示群集图像

K-means可用于处理整数。你必须这么做

但结果将不是整数。

K-means可用于处理整数。你必须这么做



但结果将不是整数。

如果您希望得到帮助,请花更多时间格式化代码并提供有关问题的所有信息。什么是
cv::kmeans
<代码>cvCalcOpticalFlowPyrLK?我认为有图像处理经验的人可以理解。cv::kmeans是kmeans算法,cvCalcOpticalFlowPyrLK是使用Lucas Kanade方法估计稀疏点集光流的函数。不,你不能。只需使用“matrix.convertTo(flt_matrix,CV_32F)”将矩阵转换为浮点类型,然后使用它,我不确定它是否有效。。我试过这个:cv::Mat flt_Dis(150,2,cv_32F,Dis);不,您需要转换如果您想得到帮助,请花更多时间格式化代码并提供有关您的问题的所有信息。什么是
cv::kmeans
<代码>cvCalcOpticalFlowPyrLK?我认为有图像处理经验的人可以理解。cv::kmeans是kmeans算法,cvCalcOpticalFlowPyrLK是使用Lucas Kanade方法估计稀疏点集光流的函数。不,你不能。只需使用“matrix.convertTo(flt_matrix,CV_32F)”将矩阵转换为浮点类型,然后使用它,我不确定它是否有效。。我试过这个:cv::Mat flt_Dis(150,2,cv_32F,Dis);不,您需要ConvertTo您的意思是像上面建议的那样吗?不,注释中的建议是将数据转换为float,然后运行cv::kmeans。我的建议是编写
yourown::integerkmeans
。请解释一下上面的代码中出现了什么问题?您有一个整数矩阵,但函数需要一个浮点矩阵。因此,这是一个错误。你的意思是像上面建议的那样吗?不,注释中的建议是将数据转换为float,然后运行cv::kmeans。我的建议是编写
yourown::integerkmeans
。请解释一下上面的代码中出现了什么问题?您有一个整数矩阵,但函数需要一个浮点矩阵。因此,这是一个错误。