判断点与多边形的关系(5):OpenCV交互式绘制图像ROI应用代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ezhchai/article/details/79605676

3个月前,由于一个应用需要交互式标识ROI,顺便总结了一下判断点和多边形关系的不同方法。形成了以下4篇blog
判断点与多边形的关系(1):向量积法
判断点与多边形的关系(2):面积法
判断点与多边形的关系(3):角度和法
判断点与多边形的关系(4):射线法

其实,如果只是为了这样的应用,可以直接调用opencv函数实现以上功能。

首先简要介绍一下opencv用到的函数(仅是简单介绍,具体功能和调用方法可查看opencv文档)。

polylines–根据图片上点的序列,绘制多边形
fillPoly–填充多边形区域

根据以上描述可知,用polylines可绘制一个多边形,用fillPloy生成mask,即可轻松实现此功能。可实际上,这里有一个坑。如图:

这里写图片描述
这里写图片描述
这里写图片描述

以上分别是绘制的过程,ROI提取图像结果和mask文件。可以看出,如果框选区域有重叠,则重叠次数为偶数的区域则会形成空洞。用户在点击时,很难对其点击行为进行限定,如果奠定,用户体验也不会好。因此,就要通过以下函数进行处理:

findContours–查找边缘,这里可以查找最外侧轮廓
drawContours–绘制轮廓,可通过此函数填充轮廓

这样处理以后,效果就是这样

这里写图片描述
这里写图片描述
这里写图片描述

可见重叠的部分都填充上了。

通过鼠标进行交互设置ROI区域的完整代码可在一下地址下载:
CSDN:https://download.csdn.net/download/ezhchai/10294189
GitHub:https://github.com/ezhchai/drawRegion

这篇博客算是对这个应用的一个总结,不知是不是大结局,能否再挖掘出一些有意思的东西~

猜你喜欢

转载自blog.csdn.net/ezhchai/article/details/79605676