c++ - 如何确定图像中多边形的面积

标签 c++ math image-processing polygon area

如果我有一个凸多边形顶点,那么我在图像中的面积计算就不会按照标准公式准确计算。

(为了简单起见)如果我有 3x3 正方形,并且顶点是 (1,1) (1,3) (3,3) (3,1)

enter image description here

通过此处描述的多边形面积计算方法

enter image description here

然后将总和除以 2,我们得到面积。

因此对于上面的 3 x 3 数据,我们将得到面积 4 而不是 9。

enter image description here

这是因为顶点不是点而是像素

这是对应的代码。坐标是循环的。

int X[] = { 1, 1, 3, 3, 1};
int Y[] = { 1, 3, 3, 1, 1};
double Sum1 = 0;
double Sum2 = 0;
int numElements = 5;

    for (int k = 0; k < numElements-1; k++)
    {
        Sum1 += X[k] * Y[k + 1];
        Sum2 += Y[k] * X[k + 1];
    }

    double area = std::abs((double)(Sum1 - Sum2))/2;

对于正方形,我们可以对宽度和高度进行 +1 并得到正确的面积。但是图像中的不规则多边形呢? 我希望这个问题是有道理的。

最佳答案

如果您不想使用像素角作为顶点,请考虑下一个方法(适用于简单图形 - 所有凸的,一些凹的):

enter image description here

在每个右边界像素的右侧、每个底部边界像素的底部、右下角像素的右下角添加额外的假像素。这里的灰色像素是初始的,浅蓝色的是假的。

关于c++ - 如何确定图像中多边形的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168179/

相关文章:

c++ - 在 Premake 中指定文件类型

algorithm - 实现Shih-Wu欧几里得距离变换:R(p)用于什么?

Java估计一个点的导数

matlab - 如何检测二值图像中的曲线?

c++ - 使用 g++ 静态链接 matio 库

c++ - CWinApp CFrameWindow 未显示

c# - C# 中的标准正态分布 z 值函数

python - 如何修复("ValueError: You are trying to load a weight file containing 16 layers into a model with 0 layers")

ios - 在 UITableViewCell 中模糊图像时出现性能问题

c++ - 计算正弦或余弦时出现奇怪的符号问题