OpenCV,两个曲线之间的面积

3
我在Python中使用OpenCV库。问题是如何在两个曲线之间选择roi区域?曲线由两个二次多项式定义。
我想找到被曲线1和曲线2限制的黑色像素的数量。

你想要两条曲线的交集吗?能否提供一个示例图像? - Hadi
我已经修改了这个问题。 - Sergey Sosnin
你知道曲线方程吗?它们有特定的形状吗?在图像中会存在多少个? - Hadi
我不知道曲线方程,它们是通过任何优化方法(例如遗传算法)拟合的。 - Sergey Sosnin
1个回答

3
您可以通过绘制椭圆来创建掩模,但是您应该从方程中获取以下数据:

  • center-椭圆的中心(这里我使用了图像的中心)。
  • axes-椭圆主轴的一半大小(这里我分别使用了图像大小/ 2和图像大小/ 4来绘制两个曲线)。
  • angle-椭圆旋转角度(以度为单位),(这里我使用了0)
  • startAngle-椭圆弧的起始角度(以度为单位)。 (这里我使用了0)
  • endAngle-椭圆弧的结束角度(以度为单位)。 (这里我使用了-180)

如果您获得了上述曲线的数据,则可以像下面这样用thickness = CV_FILLED简单地绘制椭圆

  1. 首先用color = 255绘制最大的椭圆。
  2. 现在用color = 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获取白色像素计数。


我想使用“抛物线”曲线,这种方式能实现吗? - Sergey Sosnin
1
如果您知道图像中的抛物线轮廓/线条位置,可以使用“drawContours”绘制填充轮廓。 - Micka
@shellenberg 如果你有对应于抛物线的点,请使用Micka建议的那些点绘制轮廓。 - Haris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接