0
我不使用这个代码。它应该打印簇标签然后打印质心。但“中心“矩阵的质心似乎是空的,全是零。什么是错的我的朋友?OpenCV的群集函数cvKMeans2() - 为什么当我使用中心参数
#include <iostream>
#include <stdio.h>
#include "cxcore.h"
#include "highgui.h"
using namespace cv;
int main(int argc, char** argv)
{
int i,j;
CvMat* points = cvCreateMat(5, 2, CV_32FC1);
CvMat* centers2 = cvCreateMat(5, 2, CV_32FC1);
CvMat* clusters = cvCreateMat(5, 1, CV_32SC1);
cvSetReal2D(points, 0, 0,1);
cvSetReal2D(points, 0, 1,1);
cvSetReal2D(points, 1, 0,2);
cvSetReal2D(points, 1, 1,2);
cvSetReal2D(points, 2, 0,6);
cvSetReal2D(points, 2, 1,6);
cvSetReal2D(points, 3, 0,5);
cvSetReal2D(points, 3, 1,5);
cvSetReal2D(points, 4, 0,10);
cvSetReal2D(points, 4, 1,10);
cvKMeans2(points,3,clusters,cvTermCriteria(CV_TERMCRIT_EPS,1000,0),
1000,0,KMEANS_RANDOM_CENTERS,centers2,0);
for(i=0;i<5;i++)
printf(" %lf \n", cvGetReal2D(clusters,i, 0));
for(i=0;i<5;i++){
for(j=0;j<2;j++){
printf("center %i %i = %f \n", i, j, cvGetReal2D(centers2,i, j));
}
}
cvReleaseMat(&points);
cvReleaseMat(¢ers2);
cvReleaseMat(&clusters);
}
嗯,我一直在努力了一个星期与C++ interf.but我不能明白真希工作如果使用这种类型访问myelements。如果有CvMat * points = cvCreateMat(5,2,CV_32FC1);然后我用cvSetReal2D(points,0,0,1)设置元素;并且我得到cvGetReal2D(clusters,i,0)的元素);但是当我有Mat点(5,2,CV_32F);然后我用float pointsdata [] = {1,1,2,2,6 ,6,5,5,10,10}; 垫点(5,2,CV_32F,pointsdata);但如何获得我的元素?我的意思是,如果我想有一个浮法c与第一个元素相等,那么... c = ?? c = points.at(0,0)???? –
sotiraw
如果您对元素访问有问题,您最好发布另一个问题,但通常您是正确的 - 'mat.at(0,0)'返回对单通道CV_32F Mat第一个元素的引用。 –