OpenCV之图像分割和提取(分水岭算法)

发布时间:2023-12-11 15:30

文章目录

  • 前言
  • 一、图像分割和提取是什么?
  • 二、使用步骤:
    • 1.引入库
    • 2.读入数据
    • 3.操作步骤
    • 4.操作步骤
    • 5.显示结果
    • 6.结果展示
  • 三、总结


前言

案例 Fu Xianjun. All Rights Reserved.
随着当今世界的发展,计算机视觉技术的应用越来越广泛。伴随着硬件设备的不断升级,构造复杂的计算机视觉应用变得越来越容易了。OpenCV像是一个黑盒,让我们专注于视觉应用的开发,而不必过多的关注基础图象处理的具体细节。

一、图像分割和提取是什么?

在图像处理过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来。将这些对象从视频中提取出来,而忽略那些没有对象进入背景的内容。
图像分割是图像处理过程中一项非常重要的操作,分水岭算法将图像形象的比喻为地理学上的地形表面,实现分割。

二、使用步骤:

原图展示:

\"OpenCV之图像分割和提取(分水岭算法)_第1张图片\"

1.引入库

import cv2
import numpy as np

2.读入数据

img = cv2.imread(\"coins.jpg\")

3.操作步骤

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化
ret,binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
#----------形态学操作---------------
#开操作
kerne1 = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kerne1,iterations=2)
#膨胀
sure_bg = cv2.dilate(opening,kerne1,iterations=3)#确认前景
#腐蚀
sure_fg = cv2.erode(opening,kerne1,iterations=3)#确认背景
unknow = cv2.subtract(sure_bg,sure_fg)

4.操作步骤

#---------距离变换----------------
dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)
cv2.normalize(dist_transform,dist_transform,0,1.0,cv2.NORM_MINMAX)
#---------二值化-----------------
ret,sure_fg = cv2.threshold(dist_transform,0.5*dist_transform.max(),255,0)
sure_fg = np.uint8(sure_fg)
unknow = cv2.subtract(sure_bg,sure_fg)
ret,makers = cv2.connectedComponents(sure_fg) #连接前景
makers = makers+1
makers[unknow==255]=0
makers_copy = makers.copy()
makers_copy[makers==0]=150
makers_copy[makers==1]=0
makers_copy[makers>1]=255
makers_copy = np.uint8(makers_copy)

#应用分水岭算法
makers = cv2.watershed(img,makers)
img[makers== -1]=[0,0,255]

5.显示结果

cv2.imshow(\"img\",img)
cv2.imshow(\"binary\",binary)
cv2.imshow(\"opening\",opening)
cv2.imshow(\"sure_bg\",sure_bg)
cv2.imshow(\"sure_fg\",sure_fg)
cv2.imshow(\"unknow\",unknow)
cv2.imshow(\"dist_transform\",dist_transform)
cv2.imshow(\"makers_copy\",makers_copy)
cv2.waitKey(0)  #获取按键的ASCLL码
cv2.destroyAllWindows()  #释放所有的窗口

6.结果展示

\"OpenCV之图像分割和提取(分水岭算法)_第2张图片\"

三、总结

这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了OpenCV的图像分割和提取的使用,而数字图像处理提供了大量能使我们快速便捷地处理数据的函数和方法。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号