openCV中watershed的使用

本文介绍了如何在OpenCV中使用watershed算法进行图像分割。首先通过prepareWatershed()函数对图像进行预处理,标记背景和物体区域。然后调用watershed()函数执行算法,最后提取并显示分割结果,包括带颜色标记的原图和二值化分割图。
摘要由CSDN通过智能技术生成

官网的语句说明
https://docs.opencv.org/3.4/d7/d1b/group__imgproc__misc.html#ga3267243e4d3f95165d55a618c65ac6e1

官网的例子
https://docs.opencv.org/3.4/d4/d40/samples_2cpp_2watershed_8cpp-example.html#a36

void cv::watershed ( InputArray image,
InputOutputArray markers
)

其中,inputArray是8bit单通道或者三通道原图。markers是32bit的初始标记图和输出图

作为输入markers图,存储了每个像素的初始label。给每个确定了分类的像素点,标记上1,2,3,4,……。对于不确定的像素,标记0。watershed会把每个标记为0的像素,计算出一个标记值。

作为输出markers图,每个点都标记了所属分类区域,-1的点是边界。

在官方例子samples/cpp/watershed.cpp中,让用户在界面上用鼠标点出了初始分类定义。由 onMouse记录。直到用户输入if( c == ‘w’ || c == ’ ’ )开始进行分水岭算法。我没有用这部分,所有初始类标记由代码完成,没有用户交互。

步骤一:
我自己的实用中,分水岭算法之前做了prepareWatershed();函数,为分水岭做预处理。标记了黑色背景为3,物体2,分割目标物体1,待分割0。
Mat labelImage(m_srcBGRImg.size(), CV_32S);
Mat labelDisp(m_srcBGRImg.size(), CV_8UC1);
int nrow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值