gpt4 book ai didi

c++ - OpenCV C++ 对 cv::Moments 的使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:10 26 4
gpt4 key购买 nike

我尝试使用 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 风格的方法。

最佳答案

恕我直言,使用时刻来查找质心有点矫枉过正。您可以使用以下算法来完成:

sumX = 0; sumY = 0;
size = array_points.size;
if(size > 0){

foreach(point in array_points){
sumX += point.x;
sumY += point.y;
}

centroid.x = sumX/size;
centroid.y = sumY/size;
}

或者借助 Opencv 的 boundingRect:

//pseudo-code:

Rect bRect = Imgproc.boundingRect(array_points);

centroid.x = bRect.x + (bRect.width / 2);
centroid.y = bRect.y + (bRect.height / 2);

关于c++ - OpenCV C++ 对 cv::Moments 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com