OpenCV,两条曲线之间的区域

3 投票
1 回答
1020 浏览
提问于 2025-04-18 03:44

我在用 Python 编程时,使用了 OpenCV 这个库。现在我有个问题,想知道怎么在两个曲线之间选出一个单独的区域(roi)。这两个曲线是由两个二次多项式定义的。

enter image description here

我想计算在这两条曲线之间的区域里,有多少个黑色的像素。

1 个回答

3

你可以通过画一个椭圆来创建一个遮罩,但你需要从你的公式中获取以下数据:

  • 中心点 – 椭圆的中心位置(这里我用了图像的中心)。
  • 轴 – 椭圆主轴的一半大小(这里我分别用了图像大小的一半和四分之一)。
  • 角度 – 椭圆的旋转角度,单位是度(这里我用了0度)。
  • 起始角度 – 椭圆弧的起始角度,单位是度(这里我用了0度)。
  • 结束角度 – 椭圆弧的结束角度,单位是度(这里我用了-180度)。

如果你得到了上述数据,就可以简单地用厚度设置为CV_FILLED来画椭圆,步骤如下:

  1. 首先画出最大的椭圆,颜色设置为255。
  2. 然后画第二个椭圆,颜色设置为0。

看一个例子:

   Mat src(480,640,CV_8UC3,Scalar(0,0,0));
   ellipse(src,Point(src.cols/2,src.rows/2), Size (src.cols/2,src.rows/2), 0, 0,-180,Scalar(0,0,255), -1,8, 0);
   ellipse(src,Point(src.cols/2,src.rows/2), Size (src.cols/4,src.rows/4), 0, 0,-180,Scalar(0,0,0), -1,8, 0);

enter image description here

如果你想把它用作遮罩,请在单通道图像上绘制。

补充说明:

要找到面积,可以在单通道图像上用颜色255绘制上述椭圆。

然后使用countNonZero来获取白色像素的数量。

撰写回答