OpenCV图像处理-图像分割-MeanShift

MeanShift

1. 基本概念

MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。

语法:pyrMeanShiftFiltering(img, double sp, double sr, maxLevel = 1, termcrit = TermCriteria...)

img:要平滑的图像

sp:检测半径,越大模糊越高,效果越好。

sr:色彩幅值,越大,连成一片的可能性越大。

剩下的参数都为默认值就可以。

2.代码示例

首先使用MeanShift平滑图片,然后使用Canny检测边缘,最后画出边缘即可,画出的边缘就是前景。

python 复制代码
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()算法的使用介绍,如有问题,欢迎在评论区讨论。

相关推荐
小保CPP1 天前
OpenCV C++基于CNN模型的场景文本检测(OCR)
c++·人工智能·opencv·计算机视觉·cnn·ocr·光学字符识别
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章99-换背景
图像处理·人工智能·opencv·算法·计算机视觉
小燕子~~2 天前
PS 怎么调整图片尺寸?4 种方法避免拉伸变形与放大失真
图像处理·人工智能·ai·aigc·photoshop
hans汉斯2 天前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频
tiger从容淡定是人生2 天前
生态入口之战:GPT、Gemini、Copilot与DeepSeek的战略分野
图像处理·人工智能·chatgpt·copilot·软件构建
ThsPool3 天前
【遥感学习整理 02】ENVI遥感图像处理基础:从数据读取到遥感信息产品
图像处理·人工智能·学习
sali-tec3 天前
C# 基于OpenCv的视觉工作流-章98-频域滤波
图像处理·人工智能·opencv·计算机视觉
吃好睡好便好3 天前
MATLAB中图像的线性变换
开发语言·图像处理·学习·计算机视觉·matlab
ThsPool3 天前
【遥感学习整理 01】遥感图像处理基础:从传感器观测到地理信息产品
图像处理·人工智能·学习
落苜蓿蓝3 天前
多张覆盖视场的平面棋盘图片; 、对每张图片用 OpenCV 的 findChessboardCorners 检测内角点并用 corn ...
数码相机·opencv·平面