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第一個元素的引用。 –