OpenCV C++のcv :: Momentsを使って重心を見つけようとしています。私がそれに提出する議論が何であれ、私が受け取るのはゼロです。明らかに私は何か非常に単純に間違っています。コードの出力:OpenCV C++のcv :: Momentsの使用
23 of 500 elements in unit 3
point values 2.976444 18.248287
matrix size 23
moments 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
moments 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
とコード:
printf("%d of %d elements in unit %d\n",k,number_of_features,i);
cv::Mat x(k, 1, cv::DataType<cv::Point2f>::type);
k=0;
for(int j=0;j <number_of_features;j++) {
if(i == labels.at<int>(j)) {
x.at<cv::Point2f>(k++) = samples.at<cv::Point2f>(i);
}
}
printf("point values %f %f\n", x.at<cv::Point2f>(0).x,x.at<cv::Point2f>(0).y);
cv::Size s=x.size();
printf("matrix size %d\n",s.height);
cv::Moments m=cv::moments(x);
printf("moments %f %f %f %f %f %f %f %f\n",m.m00,m.m01,m.m20,m.m11,m.m02,m.m30,m.m21,m.m03);
double h[7];
cv::HuMoments(m,h);
printf("moments %f %f %f %f %f %f %f\n",h[0],h[1],h[2],h[3],h[4],h[5],h[6]);
は不思議私はGoogleからの任意の同一のコードサンプルを見つけることができません。私が見ているのはCスタイルのアプローチです。
ありがとう!まずメソッドが正常に動作していることを確認し、コードで作業していたためにバグが見つかりました。私は、 "i" が代わりに "J" を使用していました: x.at(K ++)= samples.at (J/* BUGはここにありました* /); –