OpenCV图像处理-图像分割-MeanShift
使用MeanShift方法进行图片分割
·
1. 基本概念
MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。
语法:pyrMeanShiftFiltering(img, double sp, double sr, maxLevel = 1, termcrit = TermCriteria…)
img:要平滑的图像
sp:检测半径,越大模糊越高,效果越好。
sr:色彩幅值,越大,连成一片的可能性越大。
剩下的参数都为默认值就可以。
2.代码示例
首先使用MeanShift平滑图片,然后使用Canny检测边缘,最后画出边缘即可,画出的边缘就是前景。
import cv2
img = cv2.imread('./image/flower.png')
mean_img = cv2.pyrMeanShiftFiltering(img, 20, 30)
# 使用canny检测边缘
canny_img = cv2.Canny(mean_img, 150, 300)
# 检测轮廓
contours, _ = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 0, 255), 1)
cv2.imshow('img', img)
cv2.imshow('mean_img', mean_img)
cv2.imshow('canny_img', canny_img)
cv2.waitKey(0)
效果如下:

以上就是MeanShift()算法的使用介绍,如有问题,欢迎在评论区讨论。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)