OpenCV图像分割与提取(python)

   案例 ©Fu Xianjun. All Rights Reserved.

一、读取图像

知识储备:图像分割与提取的概念

        在图像处理的过程中, 经常需要从图像中将前景对象作为目标图像提取出来。例如无人驾驶技术, 我们关心的是周围的交通工具, 其他障碍物等, 而对于背景本身并不关注, 故而, 我们需要将这些东西从图片(视频)中提取出来, 而忽略那些只有背景的图像。

知识储备:常见的图像分割方法

1. 基于阈值的分割方法:全局阈值法、局部阈值法等

2. 基于区域的分割方法:分水岭方法、区域生长法等

3. 基于边缘的分割方法:Canny边缘检测、轮廓检测等 

4. 基于特定理论的分割方法:聚类、模糊集等(机器学习)

5. 基于神经网络的分割方法:????

知识储备:分水岭算法的概念

        图像的灰度空间很像地球表面的整个地理结构,每个像素的灰度值代表高度。其中的灰度值较大的像素连成的线可以看做山脊,也就是分水岭。        

当水平面上升到一定高度时,水就会溢出当前山谷,可以通过在分水岭上修大坝,从而避免两个山谷的水汇集,这样图像就被分成2个像素集,一个是被水淹没的山谷像素集,一个是分水岭线像素集。最终这些大坝形成的线就对整个图像进行了分区,实现对图像的分割。

知识储备:分水岭算法的步骤

知识储备:鼠标交互

opencv的鼠标交互操作主要通过两个函数实现: 第一个是cv2.setMouseCallback(windowName, onMouse [, param])

第二个是setMouseCallback()的第二个参数,称为鼠标回调函数onMouse(event, x, y, flags, param)

知识储备:区域生长算法的概念

选取某个种子点(一般实际交互时就是鼠标点击的位置),从图像种子点位置开始,将种子点相邻的符合某个阈值范围内的像素添加到生长区域中,接着判断下一个像素点,直到没有可以符合条件的像素为止,此时分割完毕。

二、分水岭算法

       1、二值化

2、形态学操作(移除噪声)

3、距离变换

                剩下的区域不确定是硬币还是背景,这些区域通常在前景和背景接触的区域(或者两个不同硬币接触的区域),我们称之为边界。

通过分水岭算法应该能找到确定的边界。由于硬币之间彼此接触,我们使用另一个确定前景的方法,就是带阈值的距离变换。

        下面左边的图为得到的距离转换图像,其中每个像素的值为其到最近的背景像素(灰度值为0)的距离,可以看到硬币的中心像素值最大(中心离背景像素最远)。对其进行二值处理就得到了分离的前景图(下面中间的图),白色区域肯定是硬币区域,而且还相互分离,下面右边的图为之前的膨胀图减去中间这个表示前景的图。

三、鼠标交互

四、区域生长算法

1、固定种子点的区域生长算法

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值