c++ - 为什么我无法使用 OpenCV 获得正确的轮廓区域?

标签 c++ opencv

我有以下轮廓:

https://drive.google.com/file/d/0B45BJEUVEkjseFd3X3RITzM5S3c/edit?usp=sharing

包含以下几点(按顺序打印):

https://drive.google.com/file/d/0B45BJEUVEkjsN3NIRU5lOFBDb00/edit?usp=sharing

但是,当我计算此等高线的面积时(使用函数 contourArea),我得到 157,这对于该等高线的大小来说太小了。我预计它会达到数千个。为什么轮廓区域计算不正确,我该如何解决?

以下是我用来计算图像所有轮廓面积的代码。感兴趣的轮廓是最后一个。我使用的原始图像在这里:

https://drive.google.com/file/d/0B45BJEUVEkjsbGhXM3E3UW1lZWs/edit?usp=sharing

int main(int argc, char* argv[])
{
  Mat imgOriginal = imread(argv[1], 0);

  if(imgOriginal.empty())
    return -1;

  Mat img;
  resize(imgOriginal, img, Size(640, 480));

  medianBlur(img, img, 11);
  Canny(img, img, 25, 100);

  vector< vector<Point> > contours;
  findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);

  for (int i = 0; i < contours.size(); i++)
    cout << "Area " << i << ": " << contourArea(contours[i]) << endl;

  return 0;
}

此外,我注意到轮廓中的几个点是重复的(我不确定为什么),这可能导致面积计算不正确。

最佳答案

可能是因为你的轮廓没有闭合?

更新:我看到您正在向它提供精明操作的结果。我会在具有非常明确的封闭形状的图像上尝试代码以测试代码并排除特定轮廓中的问题。类似于 the one used in the moments tutorial .

关于c++ - 为什么我无法使用 OpenCV 获得正确的轮廓区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899541/

相关文章:

c++ - 错误 : invalid initialization of non-const reference of type 'cv::Mat&'

c++ 在比较字符串时忽略前面的空格,例如 : "str1"compare. ("str2") = TRUE

c++ - 模板类中定义的常量

c++ - Slerp 问题,透视变形

python - 检测图像中的多个圆圈

opencv - USB网络摄像头在带有opencv的树莓派上运行缓慢

c++ - 为什么宇宙飞船允许混合比较(不同的模板实例)与无意义的结果?

c++ - clang 5:std::optional 实例化参数类型的 std::is_constructible 特征

opencv - 在opencv中裁剪图像

c++ - OpenCV 错误可能是由于不同的 "step"